java中集合类HashSet、ArrayList、LinkedList总结
2012-11-28 16:41
471 查看
【HashSet】
1. HashSet存储不能够存储相同的元素,元素是否相同的判断:重写元素的equals方法。equals方法和hashCode方法必须兼容,如:equals方法判断的是用户的名字name,那么hashCode的返回的hashcode必须是name。hashcode();
2. HashSet存储是无序的,保存的顺序与添加的顺序是不一致的,它不是线性结构,而是散列结构,(通过散列表:散列单元指向链表)。因此,HashSet的查询效率相对比较高。
3. HashSet不是线程安全的,不是线程同步的。这需要自己实现线程同步:Collections.synchronizedCollection(),方法实现。
【ArrayList】
1. 不是线程安全的,不是线程同步的。
2.ArrayList是通过可变大小的数组实现的,允许null在内的所有元素。
3.ArrayList中存放顺序和添加顺序是一致的。并且可重复元素。
4.ArrayList适合通过位子来读取元素。
【LinkedList】
1.不是线程安全的,不是线程同步的。
2.LinkedList是通过双向循环链表来实现的。
3.存放顺序和添加顺序是一致的。可添加重复元素。
4.适合链表头尾操作和插入指定位置元素的操作。
ArrayList和LinkedList之间的数据传递可通过toArray()方法。
【HashMap】
1.非线程安全,不是线程同步。
2.添加顺序和保存的顺序是不一致的。
3.必须重写key的equals方法和hashCode方法。
4.HashMap的实际容量=容量*因子,默认为16*0.75=12.所以考虑到HashMap的添加的效率问题,根据实际情况来设计它的开始的默认的容量。
的操作方法根据api来查找。
5.添加的值中是允许有null的值存在的。
【Hashtable】
1.是线程安全的,是线程同步的,在实现线程同步的时候是不需要手动来实现线程同步的。因此相对效率低。
2.添加的顺序和保存的顺序是不一致的。
3.添加的值中是不允许有null值存在的。
【TreeMap】
1.非线程安全,不是线程同步的。在必要的情况下必手动实现线程同步。
2.在元素的添加,删除和定位映射中效率相对hashMap较低。但是在排序方面TreeMap比较实用。
3.添加的值中允许有null值,但是在输出的时候会报空指针异常。
为了实现添加,删除效率提高同时实现排序的功能,则可以同时实用HashMap和TreeMap。现在HashMap对象hmap中添加和删除,然后在TreeMap对象map.putAll(hmap)来实现排序。部分代码如下:
Map<Number, Person> map = new HashMap<Number, Person>();
……// 由于篇幅有限,此处省略了向集合中添加映射关系的代码
System.out.println("由HashMap类实现的Map集合,无序:");
for (Iterator<Number> it = map.keySet().iterator(); it.hasNext();) {// 遍历集合
Person person = map.get(it.next());
System.out.println(person.getId_card() + " " + person.getName());
}
System.out.println("由TreeMap类实现的Map集合,键对象升序:");
TreeMap<Number, Person> treeMap = new TreeMap<Number, Person>();
treeMap.putAll(map);
……// 由于篇幅有限,此处省略了遍历集合的代码
System.out.println("由TreeMap类实现的Map集合,键对象降序:");
TreeMap<Number, Person> treeMap2 = new TreeMap<Number, Person>(
Collections.reverseOrder());// 初始化为反转排序
treeMap2.putAll(map);
……// 由于篇幅有限,此处省略了遍历集合的代码
}
1. HashSet存储不能够存储相同的元素,元素是否相同的判断:重写元素的equals方法。equals方法和hashCode方法必须兼容,如:equals方法判断的是用户的名字name,那么hashCode的返回的hashcode必须是name。hashcode();
2. HashSet存储是无序的,保存的顺序与添加的顺序是不一致的,它不是线性结构,而是散列结构,(通过散列表:散列单元指向链表)。因此,HashSet的查询效率相对比较高。
3. HashSet不是线程安全的,不是线程同步的。这需要自己实现线程同步:Collections.synchronizedCollection(),方法实现。
【ArrayList】
1. 不是线程安全的,不是线程同步的。
2.ArrayList是通过可变大小的数组实现的,允许null在内的所有元素。
3.ArrayList中存放顺序和添加顺序是一致的。并且可重复元素。
4.ArrayList适合通过位子来读取元素。
【LinkedList】
1.不是线程安全的,不是线程同步的。
2.LinkedList是通过双向循环链表来实现的。
3.存放顺序和添加顺序是一致的。可添加重复元素。
4.适合链表头尾操作和插入指定位置元素的操作。
ArrayList和LinkedList之间的数据传递可通过toArray()方法。
【HashMap】
1.非线程安全,不是线程同步。
2.添加顺序和保存的顺序是不一致的。
3.必须重写key的equals方法和hashCode方法。
4.HashMap的实际容量=容量*因子,默认为16*0.75=12.所以考虑到HashMap的添加的效率问题,根据实际情况来设计它的开始的默认的容量。
的操作方法根据api来查找。
5.添加的值中是允许有null的值存在的。
【Hashtable】
1.是线程安全的,是线程同步的,在实现线程同步的时候是不需要手动来实现线程同步的。因此相对效率低。
2.添加的顺序和保存的顺序是不一致的。
3.添加的值中是不允许有null值存在的。
【TreeMap】
1.非线程安全,不是线程同步的。在必要的情况下必手动实现线程同步。
2.在元素的添加,删除和定位映射中效率相对hashMap较低。但是在排序方面TreeMap比较实用。
3.添加的值中允许有null值,但是在输出的时候会报空指针异常。
为了实现添加,删除效率提高同时实现排序的功能,则可以同时实用HashMap和TreeMap。现在HashMap对象hmap中添加和删除,然后在TreeMap对象map.putAll(hmap)来实现排序。部分代码如下:
Map<Number, Person> map = new HashMap<Number, Person>();
……// 由于篇幅有限,此处省略了向集合中添加映射关系的代码
System.out.println("由HashMap类实现的Map集合,无序:");
for (Iterator<Number> it = map.keySet().iterator(); it.hasNext();) {// 遍历集合
Person person = map.get(it.next());
System.out.println(person.getId_card() + " " + person.getName());
}
System.out.println("由TreeMap类实现的Map集合,键对象升序:");
TreeMap<Number, Person> treeMap = new TreeMap<Number, Person>();
treeMap.putAll(map);
……// 由于篇幅有限,此处省略了遍历集合的代码
System.out.println("由TreeMap类实现的Map集合,键对象降序:");
TreeMap<Number, Person> treeMap2 = new TreeMap<Number, Person>(
Collections.reverseOrder());// 初始化为反转排序
treeMap2.putAll(map);
……// 由于篇幅有限,此处省略了遍历集合的代码
}
相关文章推荐
- 【Java总结-集合】Java集合的Collection接口,ArrayList,LinkedList,HashSet,TreeSet
- 小小的总结一下java异常处理和List、ArrayList、Vector、Set、HashSet、TreeSet集合的简单应用
- Java中如何克隆集合——ArrayList和HashSet深拷贝
- java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)
- Java中HashSet集合如何控制 元素唯一性 总结
- Java基础-17总结,登录注册案例,Set集合,HashSet,TreeSet,LinkHashSet
- 【Java基础之集合(一)】各种常用集合(Array、ArrayList、HashSet、HashMap、TreeMap等)分析对比
- 【幻化万千戏红尘】qianfengDay14-java基础学习:集合,ArrayList,Iterator,LinkedList
- Java集合-04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
- Java核心API -- 6(Collection集合List、Set、ArrayList、HashSet)
- 常见Java集合实现细节——ArrayList和LinkedList
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- JavaSE入门学习35:Java集合框架之List接口及其实现类ArrayList和LinkedList
- Java 集合系列之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
- JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)14
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- 总结:集合框架(LinkedList,ArrayList,HashSet)
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- java 集合之实现类ArrayList 和 LinkedList