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核心卷轴之集合的更多相关文章

  1. java核心卷轴之泛型程序设计

    本文根据<Java核心卷轴>第十二章总结而来,更加详细的内容请查看<Java核心卷轴> 1. 泛型类型只能是引用类型,不可以使用基本数据类型. 2. 类型变量含义 E : 集合 ...

  2. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  3. Java核心:类加载和JVM内存的分配

    类的加载: 指的是将class文件的二进制数据读入到运行时数据区(JVM在内存中划分的) 中,并在方法区内创建一个class对象. 类加载器: 负责加载编译后的class文件(字节码文件)到JVM(J ...

  4. Java核心编程快速学习

    Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...

  5. Java基础学习笔记二十三 Java核心语法之反射

    类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...

  6. java多线程中并发集合和同步集合有哪些?区别是什么?

    java多线程中并发集合和同步集合有哪些? hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装: 包装类Collections.synchronizedMap() ...

  7. java核心问题总结

    Java 核心概念 equals 与 hashCode 的异同点在哪里?Java 的集合中又是如何使用它们的. Math.Integer.Double等这些封装类在使用equals()方法时,已经覆盖 ...

  8. 【转】Java学习---Java核心数据结构(List,Map,Set)使用技巧与优化

    [原文]https://www.toutiao.com/i6594587397101453827/ Java核心数据结构(List,Map,Set)使用技巧与优化 JDK提供了一组主要的数据结构实现, ...

  9. Java核心编程快速入门

    Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...

随机推荐

  1. iOS隐藏键盘的几种方式

    因为开发中经常要用到textField和textView,在某些情形下隐藏键盘很有必要,而隐藏键盘有多种方式,在合适的场景下用合适的方式隐藏就显得很重要,我也老是记不起来有哪些方法,这里就记录一下,以 ...

  2. 安卓一键分享到qq,微信,微博,官方SDK非第三方

    当我们项目中需要集成分享功能时,我们通常会采取一下几个办法: 1.调用系统自带分享 优点:简单快速,几行代码搞定,不需添加任何额外包: 缺点:系统会调出手机内部所有带分享功能的APP,且界面风格跟随系 ...

  3. [GitHub]第二讲:GitHub客户端

    文章转载自http://blog.csdn.net/loadsong/article/details/51591456 Git 是一个分布式的版本控制工具,即使我不联网,也可以在本地进行 git 的版 ...

  4. A*寻路算法入门(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  5. OSI七层网络模型

    概述: OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范.OSI模型有7层结构,每层都可以有几个子层. OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输 ...

  6. Mybatis执行CachingExecutor(六)

    前面几篇博客我们介绍了Excutor及抽象类BaseExecutor和实现类SimpleExecutor.BatchExecutor和ReuseExecutor: 博客列表: Mybatis执行Exe ...

  7. ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)

    ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub    ...

  8. SQL Server扫盲系列——镜像篇

    为方便查看,并以专题形式展示,所以我会把一些文章整合起来.本部分为SQL Server镜像系列: 本文出处:http://blog.csdn.net/dba_huangzj/article/detai ...

  9. JSON 的数据转换格式(DataTable或DataSet) -善良公社项目

    这两天在使用JqueryEasyUI框架绑定数据并实现自动分页时,由于框架的限制需要使用Json数据的来传递与获取数据: JSON的全称是JavaScript Object Notation, 是一种 ...

  10. Scipy教程 - 距离计算库scipy.spatial.distance

    http://blog.csdn.net/pipisorry/article/details/48814183 在scipy.spatial中最重要的模块应该就是距离计算模块distance了. fr ...