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));
}
Java各种集合容器的总结的更多相关文章
- java之集合容器(Collection,Map)
首先我们要了解什么是集合? 正所谓容器,比如说杯子是装水的容器,衣柜是装衣服的容器,那么集合就是装数据的容器. 集合有什么特点呢? 1.集合长度是可变的 2.集合用来存储对象 集合和数组有什么区别呢? ...
- 转:java多线程--同步容器
java同步容器 在Java的集合容器框架中,主要有四大类别:List.Set.Queue.Map.List.Set.Queue接口分别继承了Collection接口,Map本身是一个接口.注意Col ...
- Java并发--同步容器
为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch).今天我们就来讨论下同步容器. ...
- Java集合容器简介
Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...
- Java基础——对象容器(顺序、集合、Hash)
扩展: For-each循环 for (String s: str) { System.out.println(s); } 等同于for (int i = 0; i < str.length; ...
- JAVA中的集合容器操作类
目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...
- [转载]Java集合容器简介
Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...
- Java中的容器(集合)之ArrayList源码解析
1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...
- Java中的容器(集合)之HashMap源码解析
1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是 ...
随机推荐
- 20145219 《Java程序设计》第06周学习总结
20145219 <Java程序设计>第06周学习总结 教材学习内容总结 InputStream与OutputStream 串流设计 1.串流:Java将输入/输出抽象化为串流,数据有来源 ...
- 多线程-信号量Semaphore
计数信号量用来控制同时访问某个特定资源的操作数量.Semaphore可以用于实现资源池,例如数据库连接池.我们可以构造一个固定长度的资源池,当资源池为空的时候,请求资源将会阻塞,而不是失败.当资源池非 ...
- nginx 403错误
1.出现此种错误的原因有可能是所有者对目录没有写的权限,此时可用chmod 777 目录名 先完全放开权限,如果问题解决,则在慢慢缩小访问权限. 解决办法:chown -R nginx_user:ng ...
- Javascript -- 级联菜单, javascript解析xml文件
1. cities.xml 保存省份和城市 <?xml version="1.0" encoding="GB2312"?> <china> ...
- NativeWindow_01
1. “{$O-}”关闭优化 “{$O-}”打开优化 2. unit NativeWindow; interface uses Windows, Messages, SysUtils; procedu ...
- 排序方法整理Java - 冒泡排序、选择排序、插入排序、快速排序
/** * 排序方法整理 * @author zhyea * */ public class Sort { /** * 冒泡排序,从小到大. * 冒泡排序是比较相邻的两个元素,若顺序错误,则执行交换. ...
- JDK_环境变量
1. 在系统环境变量中设置: ClASSPATH中输入: ".;C:\Program Files\Java\jdk1.7.0_07\jre\lib\rt.jar;"//java的安 ...
- linux rpm 卸载,简单说明
平时Linux卸载文件总是遇到卸载不干净,各种依赖什么的,今天又是搞这玩意,就记录下一个比较常规的方法. 一.查询包括某关键字的软件(这里以卸载openoffice为例) 查询包括office的软件 ...
- 遇到不确定的json格式
我们在调用webservice接口,或者http接口时,返回的json数据,有时候会因为情况不同,返回的数据格式也不一样. 比如我在调用增加档案接口时,传入要添加的档案id,如果成功了,success ...
- 算法练习5---快速排序Java版
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成 ...