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. Android进阶(二十五)setTextColor()的参数设置方式

    setTextColor()的参数设置方式 查了下资料发现setTextColor()的参数可以写成以下形式: 直接使用颜色值 setTextColor(0xFF0000FF);//0xFF0000F ...

  2. 调用sed命令的三种方式

    调用sed命令的三种方式 调用sed有三种方式,一种为Shell命令行方式,另外两种是将sed命令写入脚本文件,然后执行该脚本文件. 三种方式的命令格式归纳如下: 一.在Shell命令行输入命令调用s ...

  3. Socket编程实践(8) --Select-I/O复用

    五种I/O模型介绍 (1)阻塞I/O[默认] 当上层应用App调用recv系统调用时,如果对等方没有发送数据(Linux内核缓冲区中没有数据),上层应用Application1将阻塞;当对等方发送了数 ...

  4. 动态创建VIEW

    很多人都应该知道 global temporary table 的用法,这里也提出一个动态VIEW的用法,在实际过程中有着很好的独特之处 具体如下: /***************创建PACKAGE ...

  5. 【一天一道LeetCode】#64. Minimum Path Sum.md

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  6. 《java入门第一季》之正则表达式小案例

    案例一: 判断手机号码是否满足要求 import java.util.Scanner; /* * * 需求: * 判断手机号码是否满足要求? * * 分析: * 13436975980 * 13688 ...

  7. Android高级控件(五)——如何打造一个企业级应用对话列表,以QQ,微信为例

    Android高级控件(五)--如何打造一个企业级应用对话列表,以QQ,微信为例 看标题这么高大上,实际上,还是运用我么拿到listview去扩展,我们讲什么呢,就是研究一下QQ,微信的这种对话列表, ...

  8. STL - 各个容器的使用时机

    deque的使用场景:比如排队购票系统,对排队者的存储可以采用deque,支持头端的快速移除,尾端的快速添加.如果采用vector,则头端移除时,会移动大量的数据,速度慢. vector与deque的 ...

  9. Unix/Linux中的read和write函数

    文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符.当读或写一个文件时,使用open或creat ...

  10. LIRe 源代码分析 7:算法类[以颜色布局为例]

    ===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ...