java核心卷轴之集合
1. Iterator
1.1 注意事项
接口的remove方法将删除上次调用next方式时返回的对象,即:remove之前,必须有next(先获取,再删除)。
1.2 例一:删除字符串集合中的第一个元素
Iterator<String> it = c.iterator();//c是一个集合类的实例
it.next();
it.remove();
1.3 例二:删除两个连续的元素
Iterator<String> it = c.iterator();//c是一个集合类的实例
it.next();
it.remove(); //删除第一个元素
it.next();
it.remove();//删除第二个元素
2. 类的层次结构设计模式步骤
2.1 Interface(提供所有需要的方法名称)
2.2 AbstractClass(实现通用的方法,其他方法使用抽象方法)
2.3 Class(实现抽象方法)
3. Java类库中的具体集合
|
接口 |
集合类型 |
描述 |
|
Collection |
ArrayList |
一种可以动态增长和缩减的索引序列 |
|
LinkedList |
一种可以高效插入和删除的有序序列 |
|
|
ArrayDeque |
一种用循环数组实现的双端队列 |
|
|
HashSet |
一种无重复元素的无序集合 |
|
|
EnumSet |
一种包含枚举类型值的集合 |
|
|
LinkedHashSet |
一种无重复元素的有序(插入顺序)集合 |
|
|
PriorityQueue |
一种允许高效删除最小元素的集合 |
|
|
Map |
HashMap |
一种存储键值对的映射表 |
|
TreeMap |
一种存储有序键值对的映射表 |
|
|
EnumMap |
一种键值属于枚举类型的映射表 |
|
|
LinkedHashMap |
一种存储键值对的有序(插入顺序)映射表 |
|
|
WeakHashMap |
一种值不被使用后可以被垃圾回收器回收的映射表 |
|
|
IdentityHahMap |
一种用==而不是用equals比较键值的映射表 |
4. 链表
在Java中,所有链表实际上都是双向链接的(即:双向链表)。
5. 在集合的固定位置添加元素
5.1 在指定元素后面添加新的元素
List<String> list = new ArrayList<String>();
list.add("Tom");
list.add("Jack");
list.add("Mike");
// ListIterator里面有add()方法在某个位置添加元素
ListIterator<String> it = list.listIterator();
while(it.hasNext()){
//在jack的后面添加元素
if(it.next().equals("Jack")){
it.add("Joe");
}
}
for (String string : list) {
System.out.println(string);
}
6. Vector类和ArrayList类
6.1 Vector类:线程同步,可以由两个线程安全地访问一个Vector对象;(建议多线程时使用)
6.2 ArrayList类:线程不同步,在单线程情况下,使用效率高。(建议单线程时使用)
7. TreeSet
7.1 TreeSet排序原理
TreeSet排序是用树结构完成的(当前实现使用的是红黑树)
7.2 TreeSet和HashSet的比较
将一个元素添加到TreeSet中要比添加到HashSet中慢,但是TreeSet可以对元素自动排序(按字母顺序排序)。
8. PriorityQueue(优先级队列)
8.1 含义
以任意的顺序插入数据,无论何时调用remove()方法,总会获取当前队列(已实现自动排序)中的最小元素。
8.2 用途
使用优先级队列的典型示例是任务调度。每一个任务都有一个优先级,每次启动一个新的任务时,都会从队列中移除优先级最高的任务(通常设置1的优先级最高)。
8.3 示例
PriorityQueue<Integer> queue = new PriorityQueue<Integer>();
queue.add(3);
queue.add(5);
queue.add(2);
queue.add(1);
while(!queue.isEmpty()){
System.out.println(queue.remove()); //1 2 3 5
}
9. Map
9.1 Map的put()方法返回用这个键参数存储的上一个值
9.2 示例
Map<String, String> map = new HashMap<String, String>();
String s = map.put("Hello", "Hello");
String ss = map.put("Hello", "hello");
System.out.println(s);//null
System.out.println(ss);//Hello
10. 视图对象
10.1 含义
视图对象是指有限制的集合对象。
10.2 示例
list1就是一个试图对象,带有访问底层数组的get/set方法,但是不能改变原有数组的 长度(例如:与迭代器相关的add和remove方法),否则会抛出异常java.lang.UnsupportedOperationException
Integer[] nums = new Integer[]{1,2,3,4,5};
List<Integer> list1 = Arrays.asList(nums);
list1.add(8);//Exception in thread "main" java.lang.UnsupportedOperationException
11. 集合的排序方法
11.0 附表(创建示例列表)
List<String> strList = new ArrayList<String>();
strList.add("a");
strList.add("b");
strList.add("c");
11.1 升序排序
Collections.sort(strList);
11.2 降序排序
Collections.sort(strList,Collections.reverseOrder());
11.3 备注
Collections是一个静态工具类,里面封装了很多集合的处理函数。
12. 二分法查找(Collections.binarySearch())
12.1 返回参数
如果binarySearch返回的数字大于等于0,则返回的数值表示匹配对象的索引;若返回的是负值,则表示元素不存在。可以利用返回的负值将元素插入集合中的正确位置。
12.2 示例
List<String> list = new ArrayList<String>();
list.add("1");
list.add("3");
list.add("5");
list.add("7");
list.add("9");
int index = Collections.binarySearch(list, "4");//index : -3
if(index < 0){
list.add(-index-1, "4");
}
for (String string : list) {//1 3 4 5 7 9
System.out.print(string);
System.out.print(" ");
}
更多内容,请访问:http://www.cnblogs.com/BlueStarWei/
java核心卷轴之集合的更多相关文章
- java核心卷轴之泛型程序设计
本文根据<Java核心卷轴>第十二章总结而来,更加详细的内容请查看<Java核心卷轴> 1. 泛型类型只能是引用类型,不可以使用基本数据类型. 2. 类型变量含义 E : 集合 ...
- 深入Java核心 Java中多态的实现机制(1)
在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...
- Java核心:类加载和JVM内存的分配
类的加载: 指的是将class文件的二进制数据读入到运行时数据区(JVM在内存中划分的) 中,并在方法区内创建一个class对象. 类加载器: 负责加载编译后的class文件(字节码文件)到JVM(J ...
- Java核心编程快速学习
Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...
- Java基础学习笔记二十三 Java核心语法之反射
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...
- java多线程中并发集合和同步集合有哪些?区别是什么?
java多线程中并发集合和同步集合有哪些? hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装: 包装类Collections.synchronizedMap() ...
- java核心问题总结
Java 核心概念 equals 与 hashCode 的异同点在哪里?Java 的集合中又是如何使用它们的. Math.Integer.Double等这些封装类在使用equals()方法时,已经覆盖 ...
- 【转】Java学习---Java核心数据结构(List,Map,Set)使用技巧与优化
[原文]https://www.toutiao.com/i6594587397101453827/ Java核心数据结构(List,Map,Set)使用技巧与优化 JDK提供了一组主要的数据结构实现, ...
- Java核心编程快速入门
Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...
随机推荐
- Cocos2Dv3.4在AppDelegate中不返回的情况及解决
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们通常想在app启动的早期做一些事情,可能放在AppDeleg ...
- 小文本——Cookies
http协议的无状态性导致在需要会话的场景下寸步难行,例如一个网站为了方便用户,在一段时间内登录过改网站的浏览器客户端实现自动登录,为实现这种客户端与服务器之间的会话机制需要额外的一些标识,http头 ...
- Hessian源码分析--总体架构
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...
- Windows Server2012R2 安装 SharePoint 2013 的必备组件
Windows Server2012R2目前支持SharePoint Server 2013 with Service Pack 1 和 SharePoint Foundation 2013 with ...
- CUDA command Profiler
这里我不使用默认设置: timestamp gpustarttimestamp gpuendtimestamp gridsize threadblocksize dynsmemperblock sta ...
- UML 类图. 对象图. 接口图. 用例图 .包,参与者. 依赖关系. 泛化/继承关系. 关联关系 .聚合/聚集关系. 实现关系 组合关系。
结构元素 结构元素包括,类,对象,接口,用例,参与者. 类图 类图图示 类图是UML中最基本的元素了吧?根据OO的思想"天下一切皆对象",而类是对象的抽象. 左 ...
- Gradle 笔记——Java构建入门
Gradle是一个通用的构建工具,通过它的构建脚本你可以构建任何你想要实现的东西,不过前提是你需要先写好构建脚本的代码.而大部分的项目,它们的构建流程基本是一样的,我们不必为每一个工程都编写它的构建代 ...
- C++ Primer 有感(异常处理)(四)
查看普通函数的声明的时候,不可能知道该函数会抛出什么异常,但是在捕获异常的时候要知道一个函数会抛出什么样的异常,以便捕获异常. 异常说明:指定,如果函数抛出异常,抛出的异常将是包含在该说明中的一种,或 ...
- Spark编程模型
主要参考: Spark官方文档:http://spark.apache.org/docs/latest/programming-guide.html 炼数成金PPT:02Spark编程模型和解析 本文 ...
- (NO.00002)iOS游戏精灵战争雏形(二)
在SpriteBuilder中新建Images文件夹,将所需要的图片素材全部拖入其中: 别忘了将其转换为智能精灵图表文件夹. 因为我们不需要为ipad和安卓设计,所以在项目设置里将所有出iphone以 ...