`

Java核心技术卷I -- 第13章 集合

 
阅读更多

1. 集合接口和迭代器接口

1.1 接口

集合类基本接口: Collection,包括boolean add(E element);和Iterator<E> iterator();等方法

迭代器接口: Iterator,包括next(); hasNext(); remove();等方法

Collection<String> c = ...;

Iterator<String> iter = c.iterator();

while (iter.hasNext()) {

String element = iter.next();

do something with element

}

1.2 移除元素

当Iterator进行remove操作时,一定要使用next()方法跳过该元素,然后才执行remove操作

Iterator<String> it = c.iterator();

it.next(); //跳过第一个元素

it.remove(); //删除第一个元素

同样,如果需要删除2个相邻元素,你需要这么使用

it.next();

it.remove();

it.next();

it.remove();

1.3 java.util.Collection<E>方法

Iterator<E> iterator(): 返回一个迭代器,用于访问集合中的各个元素

int size(): 存放集合中元素数量

boolean isEmpty(): 如果没有元素,返回true

boolean contains(Object obj): 该集合中包含一个与obj相等的对象,返回true

boolean containsAll(Collection<?> other): 该集合包含了other集合中所有元素,返回true

boolean add(Object element): 添加一个元素

boolean addAll(Collection<? extends E> other): 将other中所有元素添加到集合

boolean remove(Object obj): 移除该集合中与obj相等的对象

boolean removeAll(Collection<?> other): 移除other中所有元素

void clear(): 移除该集合中所有元素

boolean retainAll(Collection<?> other): 移除所有与other众元素不相等的所有元素

Object[] toArray(): 返回该集合数组

2. 集合概述

List、Set、Queue实现了Collection接口,而Map接口则为另一种实现

2.1 Collection - List

ArrayList: 可以动态增长和减缩的索引序列

LinkedList: 可以在任何位置进行高效插入和移除的有序序列

2.2 Collection - Set

HashSet: 没有重复元素的无序集合

TreeSet: 有序集

EnumSet: 包含枚举类型元素集

LinkedHashSet: 可以记住元素被插入顺序的集合

2.3 Collection - Queue

PriorityQueue: 可以高效的移除最小元素的集合

2.4 Map

HashMap: 一种存储键/值关联的结构

TreeMap: 键有序的map集合

EnumMap: 键属于枚举类型的map集合

LinkedHashMap: 可以记住键/值被添加顺序的map集合

WeakHashMap: 该map集合中的值如果没有在其他地方使用,则被垃圾回收器回收

IdentityHashMap: 该map集合中的键使用==,而不是用equals来进行比较

3. LinkedList(链表)

链表可以在队列前、中间、后方便的插入元素

3.1 和Iterator同时使用

List<String> staff = new LinkedList<String>();

staff.add("Amy");

staff.add("Bob");

staff.add("Carl");

Iterator iter = staff.iterator();

String first = iter.next();

String second = iter.next();

iter.remove(); //删除第二个元素Bob

3.2 在任意位置插入元素

List<String> staff = new LinkedList<String>();

staff.add("Amy");

staff.add("Bob");

staff.add("Carl");

ListIterator iter = staff.listIterator(); //listIterator有add方法,可以方便的在链表中添加元素

iter.next();

iter.add("Juliet"); //添加元素Juliet在Bob前

而ListIterator还存在previous()和hasPrevious()方法,和next()与hasNext()相对应

不同在同一行中调用两次remove方法,必须有next()或者previous()

3.3 使用set方法用新值取代原来的值

String oldValue = iter.next(); //返回第一个元素

iter.set(newValue); //设置第一个元素到新的值

3.4 如果多个迭代器对同一链表操作

如果该集合的元素被一个迭代器删除,而另外一个迭代器需要访问,那么将有ConcurrentModifiactionException异常

4. ArrayList(数组列表)

两种方式来访问元素,一种迭代器,一种get和set方法来访问,后一种对ArrayList适用。Vector是同步的,ArrayList是异步,所以访问ArrayList的速度比Vector快。

5. HashSet(散列集)

散列集没有顺序,它是通过HashCode来查找该元素的位置,使用add方法添加元素到散列表中,使用contains查看是否包含某个对象。

6. TreeSet(树集)

6.1 树集合散列集相似,但是树集是一个有序集合,可以按照任何顺序插入元素,但是进行迭代时,各个值会自动排序

SortedSet<String> sorter = new TreeSet<String>();

sorter.add("Bob");

sorter.add("Amy");

sorter.add("Carl");

for (String s : sorter) System.println(s);

打印顺序为 Amy Bob Carl

树集添加元素的速度小于散列集 ,但还是大于数组和链表

6.2 TreeSet是实现了Comparable接口,然后进行排序的,如果需要实现自己的排序方式,那么需要重新实现Comparable接口,然后再构造器中提供Comparator对象

7. PriorityQueue(优先级队列)

能够以任意顺序插入元素,再按照顺序读取元素,当调用remove方法,返回当前优先级队列中最小元素。一般用来对优先级队列进行任务调度,每次找出最高优先级的任务。

8. Map(映射表)

分为HashMap和TreeMap,HashMap对键进行散列,不需要排序;TreeMap对键的全局顺序进行排序。HashMap的速度较快,一般用HashMap进行操作

8.1 put和get操作

Map<String, Employee> staff = new HashMap<String, Employee>();

Employee harry = new Employee("Harry Hacker");

staff.put("987-01-889", harry); //加入员工编号和姓名

e = staff.get("987-01-889"); //根据Key得到Value信息

8.2 得到所有键的集合

Set<String> keys = staff.keySet();

for (String key : keys) {}

8.3 值得集合 Collection<k> values()

8.4 键/值集合

for (Map.entry<String, Employee> entry : staff.entrySet()) {

String key = entry.getKey();

Employee value = entry.getValue();

}

另一种方法,使用Iterator来遍历

Iterator<Map.Entry<String, Employee>> it = staff.entrySet().iterator();

while(it.hasNext()) {

Map.Entry entry = it.next();

String key = entry.getKey();

Employee value = entry.getValue();

}

8.5 其他的一些方法

void put(Map<key,value> entries) //把Map中所有项放入到Map中

boolean containsKey(Object key) //该Map中已经存在键,返回true

boolean containsValue(Object value) //该Map中已经存在值,返回true

9. WeakHashMap(弱散列映射表)

当键不再使用,需要回收,那么就需要WeakHashMap,它用WeakReference来持有键,当弱引用加入队列,则表示该对象不再将使用

10. LinkedHashSet和LinkedHashMap

能够记录插入顺序,在存取时,能够按顺序排序

Map staff = new LinkedHashMap();

staff.put("144", new Employee("Amy"));

staff.put("255", new Employee("Bob"));

之后staff.keySet().iterator()枚举键

144 255

使用staff.values().iterator()枚举值

Amy Bob

11. EnumSet

enum Weekday {MONDY, TUESDAY, WEDNESDAY...};

EnumSet always = EnumSet.allOf(Weekday.class); //返回所有枚举值

12. IdentityHashMap(标识散列映射表)

键的散列码不是由hashCode,而是由System.IdentityHashCode计算来的,同时使用==,而不是equals来比较相等。

13. 集合框架

13.1 轻量级包装器

List<Card> cardList = Arrays.asList(cardDeck); //Arrays返回包装了一个普通Java数组的List包装器,可以使用get和set方法来操作数据

13.2 子范围

List a = staff.subList(10,20); //取出staff中10到19的元素

13.3 同步视图

HashMap<String, Employee> staff = new HashMap<String, Employee>();

Map<String, Employee> map = Collections.synchronizedMap(staff);

13.4 集合与数组的转化

数组转集合

String[] values = ...;

HashSet<String> staff = new HashSet<String>(Arrays.asList(values));

集合转数组

String[] values = staff.toArray(new String[0]); //因为集合可能是特定类型,比如String,那么就需要准确转换类型

 

分享到:
评论

相关推荐

    Java核心技术卷一第10版PDF

    第十三章会讲解多线程,这是并发编程的基础。Java提供了丰富的API来支持多线程,理解和运用这些知识可以编写出高效的并发程序。 第十四章会讨论Java的反射机制和注解,它们是Java动态特性的体现,能够增强代码的...

    Java核心技术-卷1(基础知识-原书第10版)

    《Java核心技术-卷1(基础知识-原书第10版)》是一本深入浅出的Java编程指南,专为Java编程爱好者和初学者设计。这本书详细介绍了Java语言的基础概念和核心特性,帮助读者掌握Java编程的基本技能。以下是该书涵盖的...

    Java核心技术卷1-卷2源代码(第八版)

    这里我们关注的是《Java核心技术》卷1和卷2的第八版源代码。这本书是Java开发者的重要参考资料,深入讲解了Java的基础和高级特性。以下是对这些源代码文件中可能涉及的知识点的详细解释: 1. **基础语法**:包括...

    java核心技术 卷1 第十版

    《Java核心技术 卷1 第十版》是一本深入讲解Java编程基础的经典著作,它涵盖了Java语言的核心概念和技术,是初学者和有经验的开发者提升技能的重要参考资料。此PDF版本并非扫描版,这意味着文本清晰可读,且具备目录...

    java核心技术卷1 mobi

    《Java核心技术卷1》是Java开发者必读的经典之作,它深入浅出地讲解了Java编程的基础概念和技术。这本书主要涵盖了Java语言的核心要素,为初学者和有经验的开发者提供了全面的知识框架。 首先,我们来看看“Core ...

    Java核心技术第九版卷1,2中英高清版及源码

    Java核心技术是Java编程领域的一本经典著作,涵盖了Java语言的基础和高级特性,是广大开发者学习和进阶的重要参考资料。第九版卷1和卷2分别深入探讨了Java平台的核心概念和技术,包括类库、API和编程实践。以下是这...

    java核心技术卷1基础知识原书第10版(中文+英文)带标签

    《Java核心技术卷1基础知识》是Java开发者不可或缺的经典教程,它涵盖了Java编程语言的基本概念和核心概念,为初学者和有经验的程序员提供了深入的理解。这本书的第10版结合了中文和英文两种语言,便于不同语言背景...

    Java核心技术(7-10版)官方源代码

    Java核心技术是Java编程领域的经典著作,涵盖了从基础到高级的广泛主题,包括对象导向编程、类库使用、并发处理、网络编程以及许多其他关键概念。这个压缩包包含了从第7版到第10版的官方源代码,为学习和深入理解...

    Java核心技术卷1

    《Java核心技术卷1》是Java编程领域的经典教材,第九版更是对初学者极其友好,它深入浅出地讲解了Java语言的基础知识,为学习者构建坚实的编程基础。本教材覆盖了Java开发中的诸多核心概念,旨在帮助读者全面理解并...

    Java核心技术 卷I(原书第8版).Part1 pdf

    共分两个压缩包 此为第一个压缩包 第1章 Java 程序设计概述 1.1 Java 程序设计平台 1.2 Java 白皮书的关键术语 1.2.1 简单性 1.2.2 面向对象 1.2.3 网络技能 1.2.4 健壮性 ...第13章 集合 第14章 多线程

    java核心技术 卷1 基础知识

    《Java核心技术 卷1 基础知识》是学习Java编程语言的重要参考资料,它涵盖了Java开发的基本概念和技术,为初学者提供了扎实的理论基础和实践经验。这本书深入浅出地讲解了Java的核心特性,旨在帮助读者理解和掌握...

    Java核心技术+卷I+基础知识(原书第10版)高清

    《Java核心技术 卷I 基础知识(原书第10版)》是一本深入讲解Java编程语言核心概念和技术的经典著作。这本书旨在为初学者和有经验的开发者提供全面而深入的Java SE(标准版)知识,是学习Java开发不可或缺的参考书籍...

    java核心卷I基础知识原书第10版示例代码

    《Java核心卷I基础知识原书第10版》是一本深度探讨Java编程语言基础的权威著作,涵盖了广泛的Java编程概念和技术。此压缩包文件包含了多个章节的示例代码,包括了从基本语法到进阶特性的实践应用。下面将详细阐述...

    Java核心技术卷Ⅰ 原书第十版 高清中文扫描版 ORC

    《Java核心技术卷Ⅰ》是Java编程领域的一部权威之作,尤其在原书的第十版中,它已经发展成为了一本全面、深入的教程和参考资料。这本书主要针对那些希望掌握Java核心概念和技术的高级程序员,无论是初学者还是经验...

    Java核心技术第9版卷1&卷2源码

    《Java核心技术第9版》是Java编程领域的一部权威指南,分为卷1——基础知识和卷2——高级特性两部分。这个压缩包`CoreJavaCode_9thEdition.zip`包含了这两卷书中的源代码实例,为读者深入理解Java编程提供了丰富的...

    【Java核心技术卷1:基础知识,原书第10版】(高清完整版,已OCR,可搜索复制文字)+代码

    《Java核心技术卷1:基础知识,原书第10版》是Java编程领域的经典之作,针对初学者和有经验的开发者提供了全面深入的指导。这本书详细介绍了Java语言的基础知识,包括语法、面向对象编程、类库和API等核心概念。以下...

    Java核心技术 卷1 基础知识 (第9版(英文).zip

    《Java核心技术 卷1 基础知识》是Java编程领域的经典著作,其第九版针对最新的Java语言特性进行了全面更新。这本书深入浅出地讲解了Java编程的基础概念和技术,是初学者入门和开发者巩固基础的理想读物。以下是本书...

Global site tag (gtag.js) - Google Analytics