Java容器的总结整理

Java容器指的是List,Set,Map这些类。由于翻译的问题,问到集合,Collection这些指的都是它们几个。

List

ArrayList 随机访问快

LinkedList 插入删除快

这个好理解,array嘛就是数组,随机访问快。link嘛就是链表,当然是插入删除快了。

Set 每个元素只能放一次

HashSet 使用散列

TreeSet 使用红黑树,会对元素排序,接口是SortedSet。初始化TreeSet时可以传入Comparator对象的实现做为排序函数

LinkedHashSet 也使用散列,但使用链表来维护插入顺序

Set的访问顺序

HashSet按照HashCode的顺序

TreeSet对元素排序有两种方法:

1、对象 implements Comparable。

2、new TreeSet传入参数T extends Comparator。

易错点:两个不要搞反了。在创建TreeSet的时候可以不初始化任何排序方法,此时不会报错。但添加对象进去的时候就会报错了,提示cannot be cast to java.lang.Comparable

LinkedHashSet按照插入的次序显示

关于HashCode

HashCode是一个int数值,同一个对象要求在get和put的HashCode是同一个。不同对象的HashCode不要求必须不同,只要equals方法能区分开就可以了。

一个实用的HashCode应该是基于对象内容的,并且分布平均的

Map相同的key只能放一次。这个key使用key对象的equals来判断是否重复

HashMap 类似HashSet,按key的HashCode存放

LinkedHashMap 可以按照插入次序存放,或者最近最少使用LRU顺序存放。比HashMap慢一点,但迭代访问时更快

TreeMap 类似TreeSet,基于红黑树排序

此外还有WeakHashMap, ConcurrentHashMap, IdentityHashMap

各种容器的遍历

List<Integer> list = new ArrayList<Integer>; 
//使用Iterator遍历。缺点是不能随机访问 
Iterator iter = list.iterator; 
while(iter.hasNext) { 
Integer i = (Integer) iter.next; 
}
//这个比较好。不过注意调用get(i)的时候千万不要超出List的长度范围,尤其是进行删除操作之后!
for(int i=0; i<list.size; i++) { 
Integer n = list.get(i); 
}
for(Integer i : list) { 
//可以直接对i操作 
//java8的forEach和lambda表达式组合是最牛的。适合遍历输入或者操作。
list.forEach(s -> System.out.println(s));
HashSet<Integer> iset = new HashSet<Integer>; 
iset.add(3); 
iset.add(8); 
iset.add(7); 
iset.add(11); 
//最简单的必须是它 
iset.forEach(i -> System.out.println(i)); 
//不能用for了,因为没有随机访问的get函数啦! 
Iterator<Integer> iter = iset.iterator; 
while(iter.hasNext) { 
iter.next;
}
Map<String, String> map = new HashMap<String, String>; 
map.put("111", "one"); 
map.put("zz", "zzzzzzzz"); 
map.put("a", "apple"); 
//对于entrySet迭代 
Iterator iter = map.entrySet.iterator; 
while(iter.hasNext) { 
Entry entry = (Entry) iter.next; 
System.out.println(entry.getKey + ": " + entry.getValue); 
//对key的set迭代 
Iterator iter2 = map.keySet.iterator; 
while(iter2.hasNext) { 
String key = (String) iter2.next; 
System.out.println(key + ": " + map.get(key)); 
}
 
转载 
   
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值