java中集合类的总结:
一、collection <>接口(又称集合操作类)---保存对象 有以下几个子接口:
1、list接口---有顺序,可重复
(1)ArrayList 类似于数组形式的存储,访问速度快,删除插入效率低
(2)LinkedList(实现了List和Queue两个接口)
内部实现是双向循环链表,适合频繁的插入删除操作。用于构建堆栈或者队列
由于它实现了List接口和Queue接口,因而具备这两个接口的方法和属性,
list.pop();//移除列表的最前面的元素
list.push(123);//添加到列表的最前面
list.add("abc");//添加到列表的最后面
(3)Vector向量,实现了list接口
(4)Stack类
ArrayList 和 Vector比较
a、ArrayList是异步,不能保证线程安全,Vector 是同步的,可以保证线程安全
b、从内部实现机制讲:当增加元素时,元素数目超出了内部数组目前的长度,需要扩展内部数组的长度时,
Vector在缺省情况下,自动增长为原来的一倍,而ArrayList则增长原来的50%,
若要保存大量的数据,使用Vector有优势。
2、set接口---没有顺序,不可重复
(两个元素相等的条件,hashcode值相等,equals方法返回true;
添加元素时,会调用该对象的hashcode()方法,判断与已存在的元素hashcode值是否有相同的,
如果没有,就直接添加,如果没有使用equals方法返回true,则不添加该重复元素,返回false则添加该元素)
实现类:
hashSet类:散列存放,线程不安全
TreeSet类:有序存放
排序 方法一:实现comparable接口,重写comparaTo()方法,
方法二:实现comparator接口,重写compare(o1,o2)方法
(TreeSet是SortedSet接口的唯一实现类)
3、Queue接口()--一个有序的对象列表,就像List一样,但是它的使用有略微的区别。
Queue被设计成从末端插入并且从头部删除的形式。
实现类
(1)LinkedList(如List接口中的介绍)
(2)PriorityQueue保存数据默认是根据内部的自然排序,如果指定了Comparator比较器,
则会使用比较器进行排序。
二、map 接口的子类 -- 保存键值对。
实现类
(1)HashMap<> a、异步的,适用于不需要线程安全的。b、可以将一个空值做为一个条目
(2)HashTable<>a、同步的,可以保证线程安全。 b、不能存放空值
( 3 )TreeMap<>间接继承了map接口 也不能存放空值
( 4 )Properties 继承了HashTable ,以键值对方式存储
# 表示注释,
键=值,键不可以换行,值换行用“\”表示
值可以没有,但是不能没有键,没有值时 ,=号:可有可没有
map集合的三种输出方法:
(1)、通过EntrySet方法变成set对象;
调用set的Iterator方法,此时每个Iterator对象都是Map.entry对象;
然后分离Map.entry中的key-value
Set<Entry<key,Value>> set=hashmap.entrySet();
Iterator<Entry<key,value>> it=set.iterator();
while(it.hasnext())
{
it.next();
}
(2)、通过keySet方法得到Map集合中的key Set集合;
调用iterator方法,此时每个Iterator对象是key值(也可使用for each循环输出)
通过map 的getValue(key)得到value值
Set<Key> set=hashmap.keySet();
Iterator<Key> it=set.iterator();
while(it.hasNext())
{
String key=it.next();
String value=hm.getValue();
}
(3)、只输出value值
Collection<String> s=hm.values();
for(String s1:s)
{ sysout (s1);}
总结:
1、若要求线程安全,使用Vector,Hashtable
2、若不要求线程安全,应使用ArrayList/LinkedList/HashMap
3、要求键值对,使用hashmap/hashtable
4、数据量比较大,又考虑线程安全,使用vector
三、Iterator 接口
迭代器:开始指向第一个位置的下一个元素
常用hasNext() 和next()方法
常用于遍历集合