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

Java各种集合容器的总结的更多相关文章

  1. java之集合容器(Collection,Map)

    首先我们要了解什么是集合? 正所谓容器,比如说杯子是装水的容器,衣柜是装衣服的容器,那么集合就是装数据的容器. 集合有什么特点呢? 1.集合长度是可变的 2.集合用来存储对象 集合和数组有什么区别呢? ...

  2. 转:java多线程--同步容器

    java同步容器 在Java的集合容器框架中,主要有四大类别:List.Set.Queue.Map.List.Set.Queue接口分别继承了Collection接口,Map本身是一个接口.注意Col ...

  3. Java并发--同步容器

    为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch).今天我们就来讨论下同步容器. ...

  4. Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  5. Java基础——对象容器(顺序、集合、Hash)

    扩展: For-each循环 for (String s: str) { System.out.println(s); } 等同于for (int i = 0; i < str.length; ...

  6. JAVA中的集合容器操作类

    目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...

  7. [转载]Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  8. Java中的容器(集合)之ArrayList源码解析

    1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...

  9. Java中的容器(集合)之HashMap源码解析

    1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是 ...

随机推荐

  1. SpringBoot AOP示例

    AOP主要注解: @Aspect,作用在类上,说明这是一个Aspect切面类. @Pointcut,用来描述,你需要在哪些类的哪些方法中植入你的代码. @Adive,与Pointcut配合使用,主要说 ...

  2. make install报错

    今天,在运行公司内核的机器上,编译标准内核,结果提示: 问题原因: 原来安装新内核的时候,会与原内核比较,如果缺少了某些模块,就会提示”ERROR: modinfo: could not find m ...

  3. 利用OPENSSH自身记录密码

    大家都知道,OPENSSH是基于Linux下,一款开源,安全性不错的Linux SSH会话连接工具. 在渗透当中,当我们get root了.我们如何来记录Linux管理员登陆过的SSH? 想法如下: ...

  4. JavaWeb -- Struts2 ResultType细化, 国际化

    1. ResultType细化 <result-types> <result-type name="chain" class="com.opensymp ...

  5. [日常训练]AekdyCoin的跳棋

    Description $AekdyCoin$正在玩一个游戏,该游戏要用到两副牌和一个数轴和一个棋子. 刚开始的时候棋子位于数轴的$0$位置.然后$AekdyCoin$交替的从两副牌中抽取一张牌,然后 ...

  6. Entity Framework 6 预热、启动优化

    虽然文章题目是针对EF的,但涉及的内容不仅仅是EF. 场景介绍 目前在做的一个项目,行业门户,项目部分站点按域名划分如下: user.xxx.com:用户登陆注册 owner.xxx.com:个人用户 ...

  7. spring3: 切面及通知实例 Aspectj的aop

    1.前置通知 接口: package chapter1.server; public interface IHelloService { public void sayAdvisorBefore(St ...

  8. [转]linux将一个服务器上的文件或者文件夹复制到另一台服务器上

    本文转载自<linux 将一个服务器上的文件或者文件夹复制到另一台服务器上>,有时间实践一把 使用scp将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上 复制文件或文件夹 ...

  9. uva 10305 拓扑排序裸题

    https://vjudge.net/problem/UVA-10305 目前没学dfs做法,用的队列做法,每次找到一个入度为零的点出队后更新其他点,再加入入度为零的点直到查找完毕,这个题目显然一定有 ...

  10. MVC,MVP 和 MVVM 的图示,区别

    作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身 ...