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

各种容器的遍历:

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

时间: 2024-11-13 02:06:43

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

2020-01-21 【JAVA】集合(容器)与遍历

Collection接口 extends java.lang.lterable接口 List-->ArrayList ,LinkedList,Vector # 数组int array[] = new int[3]; for ( int i = 0; i < array.length; i++){ System.out.println(array[i]); } # ArrayList 是有序的连续的可重复的线性表,底层维护的是数组,List<String> list = new Ar

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

java同步容器 在Java的集合容器框架中,主要有四大类别:List.Set.Queue.Map.List.Set.Queue接口分别继承了Collection接口,Map本身是一个接口.注意Collection和Map是一个顶层接口,而List.Set.Queue则继承了Collection接口,分别代表数组.集合和队列这三大类容器.像ArrayList.LinkedList.HashMap这些容器都是非线程安全的.因此,在编写程序时,必须要求程序员手动地在任何访问到这些容器的地方进行同步处

Java集合容器简介

Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),AttributeList(1.5),RoleList(1.5),RoleUnresolvedList(1.5), ConcurrentLinkedQueue(1.5),ArrayBlockingQueue(1.5),LinkedBlockingQueue(1.5), PriorityQueue(1.5),

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

1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是一个以键值对存储的容器. hashMap底层实现为数组+链表+红黑树(链表超过8时转为红黑树,JDK7为数组+链表). HashMap会根据key的hashCode得到对应的hash值,再去数组中找寻对应的数组位置(下标). hash方法如下: static final int hash(Object key

Java集合容器面试题

什么是集合 集合框架:用于存储数据的容器. 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构. 任何集合框架都包含三大块内容:对外的接口.接口的实现和对集合运算的算法. 接口:表示集合的抽象数据类型.接口允许我们操作集合时不必关注具体实现,从而达到"多 态".在面向对象编程语言中,接口通常用来形成规范. 实现:集合接口的具体实现,是重用性很高的数据结构. 算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查 找.排序等.这些算法通常是多态的,因为相

java字符串集合

一,java的接口跟C语言所能做到的相比确实是让人眼前一亮的东西.利用接口可以将多种东西放到一起,在编程过程中就能省略掉相同类的很多重复代码,将代码进行分类别的,统一的处理. 二,java中的字符串处理,java中的字符串并不像C语言那样利用二维数组来进行操作,而是对应了String这个对象,可以用new的方法创建一个字符串对象,而这个字符串对象有很多方法可以直接调用,这样直接对对象进行操作,显得非常方便. 神奇的字符串操作方法 str.length() str.indexOf(),indexO

JAVA常用集合框架用法详解基础篇一之Colletion接口

首先,在学习集合之前我们能够使用的可以存储多个元素的容器就是数组. 下面举几个例子主要是引出集合类的: 1.8,4,5,6,7,55,7,8  像这样的类型相同的可以使用数组来存储,本例可以用int[] arr来存储. 2."zhnagsan",true,68 像这样的可以使用StringBuilder或者StringBuffer来存储,但最终需要使用.toString()的方法转换成字符串才可以使用.即 变为:"zhnagsantrue68". 3."李

黑马程序员——Java基础---集合(一)---Collection、set、list

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------        集合框架 java中有许多的集合,也称为容器,下图便是集合框架的构成及分类. 一.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式.

黑马程序员------java基础----集合

  ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! -------  集合框架 为什么会出现这么多容器? 因为每一个容器对数据的存储方式都有不同,这个存储方式称之为:数据结构. 一.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存