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

各种容器的遍历:

1、List集合的遍历

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));

2、Set集合的遍历

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();
        }

3、Map集合的遍历

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. bzoj3555: [Ctsc2014]企鹅QQ (Hash)
  2. python网络编程——IO多路复用之epoll
  3. treeview所有节点递归解法(转+说明)或者说递归的实际应用
  4. C# 重载运算符
  5. https://www.nginx.com/blog/introduction-to-microservices/
  6. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q118-Q120)
  7. GridView总结二:GridView自带编辑删除更新
  8. socket通信入门
  9. 用于json的 .ashx 小细节
  10. 销售订单行上行号LINE_SHIPMENT_OPTION_NUMBER
  11. mysql数据库分组(GROUP BY)查询实例
  12. php开源项目学习二次开发的计划
  13. tag标签添加删除并把值存入到一个input的value内
  14. 微信二维码扫描下载APK
  15. Redis C客户端API - God's blog - 博客频道 - CSDN.NET
  16. C# The process cannot access the file because it is being used by another process
  17. react native( rn) 中关于navigationOptions中headerRight 获取navigation的问题 rn
  18. 51Nod1222 最小公倍数计数 数论 Min_25 筛
  19. RESTful学习笔记
  20. Bootstrap3基础 bg-danger/info... 辅助类样式 背景文本颜色

热门文章

  1. MapReduce:将下面的两排数字先按第一排排序,然后再按第二排排序,要求顺序排序
  2. 平滑重启php
  3. 编写一个程序,将 d:\java 目录下的所有.java 文件复制到 d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad。
  4. Spring之RMI 远程方法调用 (Remote Method Invocation)
  5. 关于一些对location认识的误区(转)
  6. IOS-真机相关
  7. IOS-将任意对象存进数据库
  8. DRF 返回数据的封装,和分页
  9. Android平台下渗透测试工具大集合
  10. Dockerfile 模版