标签:元素 shm lis 数组元素 ++ compare 支持 可重复 比较
java集合类主要由两个接口派生而出:Collection和Map
Collection :Set(无序集合,元素不可重复) List(有序集合,元素可以重复)Queue(队列)
Map:HashMap(线程不安全,key,value允许为null) Hashtable(线程安全,key value不能为null) TreeMap。
遍历集合的方式:
1)Iterator方式
List list = new ArrayList();
Iterator<student> iterator = list.iterator();
while(iterator.hasNext()) {
student next = iterator.next();
}
2)foreach循环遍历
List list = new ArrayList();
for (Object object : list) {
System.out.println(object);
}
3)for循环
List list = new ArrayList();
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
System.out.println(obj);
}
一。Set
1)HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用的这个实现类。
HashSet的特点:
不能保证元素的排序顺序,顺序可能与添加的顺序不同,顺序也可能发生变化。
HashSet不是同步的,如果多个线程同时访问同一个HashSet,假设有两个或者多个以上线程同时修改HashSet集合时,必须要通过代码来保证其同步。
集合的值可以为null。
HsahSet集合判断两个对象相等的标准是两个对象的equals方法比较相等,并且两个对象的hashCode值方法的返回值也相等。
当向HashSet集合中存入一个自定义类型元素时, 要注意重写自定义类型的的hashCode()方法和equals方法(),HashSet的会调用该对象的hashCode()方法来得到该对象的hahsCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置,如果hash值不同就认为不是用一个对象,如果hash值相同就在判断equals是否为同一个对象。
2)TreeSet
TreeSet可以确保集合元素处于排序状态,TreeSet支持两种排序方法:自然排序和定制排序
自然排序:TreeSet会调用集合元素的compareTofangfa来比较元素之间的大小关系,然后按照元素的升序排序。
java的一些常见类都已经实现了Comparable接口,并提供了比较大小的标准。
如果试图把一个对象添加到TreeSet时,则该对象必须实现Comparable接口。
定制排序:
需要在创建TreeSet集合对象时,提供一个Comparator对象与该TreeSet集合关联,由该Comparator对象负责集合元素的排序逻辑。
二。List
1)ArrayList和Vector
两者都是基于数组实现的List类,两者封装了一个动态的允许在分配的Object数组。当添加的数组元素超过该数组的长度时,数组会自动扩容。
两者的区别:
ArrayList是线程不安全的,当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改ArrayList集合则需要程序手动保证该集合的同步性。
而Vector线程是安全的,无须程序保证该集合的同步性。
2)LinkList
可以根据索引来随机访问集合中的元素。
三。Map
1)HashMap和Hashtable
两者区别:
1.Hashtable是一个线程安全的Map实现,但是HashMap是线程不安全的实现,所以HashMap比Hashtable的性能高一点,但如果有多个
线程访问同一个Map对象时,使用Hashtable实现类会更好。
2.Hashtable不允许null作为key和value,当HashMap可以使用null作为key或value。
标签:元素 shm lis 数组元素 ++ compare 支持 可重复 比较
原文地址:http://www.cnblogs.com/strshun/p/7354463.html