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提供了丰富的API来支持多线程,理解和运用这些知识可以编写出高效的并发程序。 第十四章会讨论Java的反射机制和注解,它们是Java动态特性的体现,能够增强代码的...
《Java核心技术-卷1(基础知识-原书第10版)》是一本深入浅出的Java编程指南,专为Java编程爱好者和初学者设计。这本书详细介绍了Java语言的基础概念和核心特性,帮助读者掌握Java编程的基本技能。以下是该书涵盖的...
这里我们关注的是《Java核心技术》卷1和卷2的第八版源代码。这本书是Java开发者的重要参考资料,深入讲解了Java的基础和高级特性。以下是对这些源代码文件中可能涉及的知识点的详细解释: 1. **基础语法**:包括...
《Java核心技术 卷1 第十版》是一本深入讲解Java编程基础的经典著作,它涵盖了Java语言的核心概念和技术,是初学者和有经验的开发者提升技能的重要参考资料。此PDF版本并非扫描版,这意味着文本清晰可读,且具备目录...
《Java核心技术卷1》是Java开发者必读的经典之作,它深入浅出地讲解了Java编程的基础概念和技术。这本书主要涵盖了Java语言的核心要素,为初学者和有经验的开发者提供了全面的知识框架。 首先,我们来看看“Core ...
Java核心技术是Java编程领域的一本经典著作,涵盖了Java语言的基础和高级特性,是广大开发者学习和进阶的重要参考资料。第九版卷1和卷2分别深入探讨了Java平台的核心概念和技术,包括类库、API和编程实践。以下是这...
《Java核心技术卷1基础知识》是Java开发者不可或缺的经典教程,它涵盖了Java编程语言的基本概念和核心概念,为初学者和有经验的程序员提供了深入的理解。这本书的第10版结合了中文和英文两种语言,便于不同语言背景...
Java核心技术是Java编程领域的经典著作,涵盖了从基础到高级的广泛主题,包括对象导向编程、类库使用、并发处理、网络编程以及许多其他关键概念。这个压缩包包含了从第7版到第10版的官方源代码,为学习和深入理解...
《Java核心技术卷1》是Java编程领域的经典教材,第九版更是对初学者极其友好,它深入浅出地讲解了Java语言的基础知识,为学习者构建坚实的编程基础。本教材覆盖了Java开发中的诸多核心概念,旨在帮助读者全面理解并...
共分两个压缩包 此为第一个压缩包 第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编程语言的重要参考资料,它涵盖了Java开发的基本概念和技术,为初学者提供了扎实的理论基础和实践经验。这本书深入浅出地讲解了Java的核心特性,旨在帮助读者理解和掌握...
《Java核心技术 卷I 基础知识(原书第10版)》是一本深入讲解Java编程语言核心概念和技术的经典著作。这本书旨在为初学者和有经验的开发者提供全面而深入的Java SE(标准版)知识,是学习Java开发不可或缺的参考书籍...
《Java核心卷I基础知识原书第10版》是一本深度探讨Java编程语言基础的权威著作,涵盖了广泛的Java编程概念和技术。此压缩包文件包含了多个章节的示例代码,包括了从基本语法到进阶特性的实践应用。下面将详细阐述...
《Java核心技术卷Ⅰ》是Java编程领域的一部权威之作,尤其在原书的第十版中,它已经发展成为了一本全面、深入的教程和参考资料。这本书主要针对那些希望掌握Java核心概念和技术的高级程序员,无论是初学者还是经验...
《Java核心技术第9版》是Java编程领域的一部权威指南,分为卷1——基础知识和卷2——高级特性两部分。这个压缩包`CoreJavaCode_9thEdition.zip`包含了这两卷书中的源代码实例,为读者深入理解Java编程提供了丰富的...
《Java核心技术卷1:基础知识,原书第10版》是Java编程领域的经典之作,针对初学者和有经验的开发者提供了全面深入的指导。这本书详细介绍了Java语言的基础知识,包括语法、面向对象编程、类库和API等核心概念。以下...
《Java核心技术 卷1 基础知识》是Java编程领域的经典著作,其第九版针对最新的Java语言特性进行了全面更新。这本书深入浅出地讲解了Java编程的基础概念和技术,是初学者入门和开发者巩固基础的理想读物。以下是本书...