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. 【一天一道LeetCode】#345. Reverse Vowels of a String

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

  2. 【一天一道LeetCode】#109. Convert Sorted List to Binary Search Tree

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

  3. Unity UGUI基础之InputField

    InputField(输入域):为文本输入控件,等同于NGUI的Input. 一.InputField组件: Text Component(文本组件):此输入域的文本显示组件,需带有Text组件. T ...

  4. spring4泛型初探----一个小例子

    泛型的出现,是为了让代码更规整. 例如 Set<String> set=new HashSet<>(); set.add("abc"); set.add(1 ...

  5. OJ题:成绩排序

    题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理. 例示: jack 70 peter 96 Tom 70 smit ...

  6. ORACLE 多表关联 UPDATE 语句

    为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, SQL 代码 --客户资料表 create table customers ( customer_id num ...

  7. 对嵌入式开发C语言结构体的一点总结

    今天冬至居然不上班,公司的良心啊!这回有心情写博客和日志了,好了,废话不多说.直接看下文: 鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少.话说,基础什么的比你会更牛逼的算法更重要,基础不牢, ...

  8. Windows环境下搭建React Native

    随着移动开发越来越火热,前端开发也是有之前11年一直火热到现在,不过我发现从去年年底开发,Android和ios基本已经饱和了,特别是随着广大开源社区的中很多人贡献代码,开发已经不是什么问题了,所以现 ...

  9. 【一天一道LeetCode】#5 Longest Palindromic Substring

    一天一道LeetCode系列 (一)题目 Given a string S, find the longest palindromic substring in S. You may assume t ...

  10. jQuery:多个AJAX/JSON请求对应单个回调

    原文链接:jQuery: Multiple AJAX and JSON Requests, One Callback 原文日期: 2014年4月15日 翻译日期: 2014年4月22日 翻译人员: 铁 ...