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初级教程启动定时器详解

    本案例知识是:后台执行定时任务. Alarm机制: 一.创建LongRunningService类 package com.example.servicebestpractice; import ja ...

  2. Android性能优化之Bitmap的内存优化

    1.BitmapFactory解析Bitmap的原理 BitmapFactory提供的解析Bitmap的静态工厂方法有以下五种: Bitmap decodeFile(...) Bitmap decod ...

  3. 程序员大牛 Jeff Atwood 的两本中文书

    程序员大牛,StackOverflow.com创始人之一--Jeff Atwood 英文博客:http://blog.codinghorror.com <高效能程序员的修炼>,人民邮电出版 ...

  4. [GitHub]第七讲:GitHub issues

    文章转载自:http://blog.csdn.net/loadsong/article/details/51591701 Github 上的每个项目仓库,都有三套基础设置可供使用:一个是通过 Gith ...

  5. 【一天一道LeetCode】#102. Binary Tree Level Order Traversal

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

  6. printf函数压栈解惑

    最近看到一些程序员的笔试题目,经常会考到printf函数的参数压栈问题,总体来讲就是参数从右向左依次压栈,再出栈,但是今天看到一个看似很简单的题目,却一直找不到头绪.题目如下: #include &l ...

  7. Web报表工具FineReport二次开发JS之字符串

    在报表开发过程中,有些需求可能无法通过现有的功能来实现,需要开发人员二次开发,以FineReport为例,可以使用网页脚本.API接口等进行深入的开发与控制. 考虑到JS脚本开发的使用较多,这里先先简 ...

  8. 【面试必备】Swift&nbsp;面试题及其答案

    原文:Swift Interview Questions and Answers 原作者:Antonio Bello 原作者介绍: Antonio 拥有丰富的编程经验.他开始编程的时候,内存单位还是 ...

  9. 10、Libgdx的内存管理

    (官网:www.libgdx.cn) 游戏是非常耗资源的应用.图片和音效可能耗费大量的内存,另一方面来说,这些资源没有被Java垃圾回收,让一个垃圾处理来决定将显存中的5M的图片进行释放也不是一个明知 ...

  10. SpringMVC注解控制器详解

    主要包括四类:@Component.@Repository @Service.@Controller 说明: @Controller 控制层,就是我们的action层 @Service 业务逻辑层,就 ...