码迷,mamicode.com
首页 > 编程语言 > 详细

【学习笔记】java集合框架1

时间:2015-04-11 19:20:26      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

内容:

/********************

数组与集合
集合框架体系
SET接口
LIST接口
迭代器接口
Map接口
老集合类的使用
内部比较器与外部比较器
集合类的综合使用

********************/

一. 数组

int[] aryInt = new int[100]
用于容纳一组数据
数组的特点:
在Java中,数组是被当做对象处理的
数组长度在数组初始化时必须固定
长度在固定之后,要改变数组长度大小的话,必须对数组进行长度大小变化的控制

package com.fjnu.study2;

public class Array {
    public static void main(String[] args){
        String[] strs = new String[10]; //当作对象, 定义一个数组长度为10
        String[] strs1 = { "1", "2" };
        String[] strs2 = null;
        String[] strs3;
        String[] strs4 = new String[] {};
        System.out.println(strs.length);
        System.out.println(strs1.length);
        //System.out.println(strs2.length); //运行期间出错, 因为对象没有实例化
        //System.out.println(strs3.length); //编译期间错误,因为没有赋初值
        System.out.println(strs4.length);
    }
}
10
2
0

 

数组的优缺点:

数组存取效率高,使用时要求容量大小固定;适合基本数据类型的存取;

 

而集合存取效率上有一定的牺牲,集合容量大小可以根据实际需要改变,提供丰富的存取方法,适合成为对象的“容器”;

集合用来存储对象。

 

两个对象的equals相等,那么他们的哈希码一定相等

两个对象的哈希码相等,那么他们的equal不一定相等。

 

Collection接口

集合框架的根
通用方法                
 boolean contains(Object a)
 boolean equals(Object a) 
 Iterator iterator() //遍历
 int size() 
 void clear() 
 boolean add(Object a) 
 Boolean remove(Object a)

 

Set接口以及特点

扩展Collection接口 不允许重复元素 允许一个null值 对 add()、equals() 和 hashcode() 方法添加了限制

 

set接口的实现类

HashSet
LinkedHashSet
CopyOnWriteArraySet
TreeSet

 

HashSet的特点

底层是以哈希表的算法实现的。
不是线程同步的一个集合类
探讨HashSet中的重复概念?
探讨HashSet中的元素到底是不是无序的?

什么是重复

public boolean equals(Object obj)
    指示某个其他对象是否与此对象“相等”。 
    注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。 
public int hashCode() 
生成对象的哈希码。返回对象存储的物理地址(实际上可能并不是),但是是用来标识对象的一个标记号。

LinkedHashSet特点

LinkedHashSet的特点
底层是以链表实现的
LinkedHashSet是有序的(插入顺序有序)
不是线程同步的一个集合类

CopyOnWriteArraySet

CopyOnWriteArraySet的特点
底层是以数组实现的
线程安全的集合类。
元素之间是有序的.(插入有序)

copyOnWriteArraySet 是用数组实现了, 而LinkHashSet是用链表实现的,会更快

 

TreeSet的特点

TreeSet的特点
底层是以TreeMap实现的红黑树结构
不是线程安全的类
元素之间是有序的(不是插入顺序,而是指元素之间有序)。

 

迭代器Iterator

对集合进行迭代的迭代器。迭代器代替了 Java Collections Framework 中的 Enumeration。
包含如下方法: 
boolean hasNext()
    如果仍有元素可以迭代,则返回 true。
Object next()
    返回迭代的下一个元素。 
boolean  remove(Object o)
    从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法

迭代器会出现快速失败异常

什么叫快速失败异常
出现快速失败异常的原因
如何解决快速失败异常
A:使用迭代器删除
B:使用线程安全的集合

快速失败异常的原因举例:如果在迭代的过程中,有其他线程在修改这个迭代的数据,那么迭代的数据就会具有不定性,所以会出现错误。

package com.fjnu.study2;
import java.util.HashSet;
import java.util.Set;
import java.util.Iterator;

public class interg {
    public static void main(String[] args){
        Set set = new HashSet();
        set.add("aa");
        set.add("bb");
        set.add("cc");
        System.out.println(set);
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            String str = (String)iterator.next();
            if (str.equals("bb")){
                //set.remove(str);//出现快速失败异常
                iterator.remove();
            }
        }
        System.out.println(set);
    }
}

 

List接口以及特点

扩展了Collection接口
具有顺序的集合(插入的顺序)
元素可以通过其整型下标访问
可以包含重复元素
方法分类
定位方法:get()、set()、add()、remove()、addAll()
搜索方法:indexOf() 和 lastIndexOf() 
ListIterator方法:listIterator() 和 subList() 

List接口的实现类

ArrayList类:
      由一个数组后推而成,适合查询频繁的列表
LinkedList类:
      由一个双向链表后推而成,适合插入删除频繁的列表

ArrayList的特点

ArrayList的特点
底层是以数组实现的
元素是有序的(插入顺序)
不是线程安全的集合类
适合查找频繁的操作

LinkedList

LinkedList的特点
底层是以链表实现的数组
元素是有序的(插入顺序)
不是线程安全的集合类
适合增删改比较频繁的操作

CopyOnWriteArrayList

CopyOnWriteArrayList的特点
底层是以数组实现的
元素是有序的(插入顺序)
线程安全的集合类
查找速度比较快,增删改速度比较慢。

 

注意List中的sublist的用法


 Map接口

关键字唯一
将键映射至值的对象
每个键最多都只能映射至一个值
键值重复的话,后面添加的后覆盖前面元素的值。

重要方法
基本操作
 put()、get()、remove()、containsKey()、containsValue()、size() 和 isEmpty()  
 批操作
 putAll() 和 clear()    
 集合视图
 keySet()、values() 和 entrySet()

HashMap

底层是以哈希算法实现
允许一个NULL键,允许多个NULL值
元素之间是无序的
不是线程安全的集合类

LinkedHashMap

底层是以链表实现
允许一个NULL键,允许多个NULL值
元素之间是有序的(插入顺序有序)
不是线程安全的集合类

TreeMap

底层是以红黑树算法实现
元素之间是有序的(是对象之间有序)
不是线程安全的集合类

迭代Map

通过KeySet来迭代
通过Values来迭代
通过Map.Entry来迭代

 

老的集合类

Vector
HashTable
Enumeration

HashTable

HashTable的特点
不允许空键
不允许空值
其它的特点与用法与HashMap相同。

Enumeration

包含下列方法:
boolean hasMoreElements() 
    当且仅当此枚举对象至少还包含一个可提供的元素时,才返回 true;否则返回 false。 
Object nextElement()
    得到此枚举的下一个元素。
与Iterator的区别:
        迭代器允许调用方利用定义良好的语义在迭代期间从迭代器所指向的集合移除元素。
思考Enumeration中为什么不提供remove方法?

 

【学习笔记】java集合框架1

标签:

原文地址:http://www.cnblogs.com/hlwyfeng/p/4417478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!