本文主要总结Java程序中的集合部分,主要涉及:Array、Collector、Map
Array
数组是一种效率最高的存储和随机访问对象引出序列的方式
所付出的代价就是数组对象的大小被固定,且再其生命周期中不可改变。
数组针对数据类型的检查可以在编译时进行,而其他容器需要泛型配合(没有泛型时,默认Object)
实例化、输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
String[] words1 = new String[]{"Line", "Java", "Scala"} ; String[] words = {"Line", "Java", "Scala"} ;
String[] words2 = new String[3] ; words2[0] = "Line" ; words2[1] = "Java" ; words2[2] = "Scala" ;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| String[] words = {"Line", "Java", "Scala"} ;
System.out.println(words);
System.out.println(Arrays.toString(words));
for (String word : words) { System.out.println(word); }
for (int i = 0; i < words.length; i++) { Syste m.out.println(words[i]); }
|
方法-对象
length
是数组中唯一可以访问的字段或方法。
方法-类库支持
- 原数组改变:排序、复制、填充
- 原数组不变:转列表、输出、查找、判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| String[] words = {"Line", "Java", "Scala"} ; String[] words1 = new String[]{"Line", "Java", "Scala"} ;
String wordStr = Arrays.toString(words);
java.util.Arrays.sort(words); int index = Arrays.binarySearch(words, "Line"); System.out.println(index);
System.out.println(Arrays.equals(words,words1));
List<String> strings = Arrays.asList(words);
Arrays.fill(words1,"Fill");
System.arraycopy(words,0,words1,0,3);
|
引用传递
参考对象的引用传递和内存图。
Link
Collection
%%{init: {'theme': 'default', 'themeVariables': { 'fontSize': '14px'}}}%%
classDiagram
direction LR
Collection <|-- List: 有序、可重复
Collection <|-- Set: 不重复
List <|-- ArrayList: 快速定位,异步处理
List <|-- Vector: 同步处理,线程安全
List <|-- LinkedList: 增删方便
Set <|-- HashSet: 无序:hashCode、equals
Set <|-- SortedSet
HashSet <|-- LinkedHashSet: 输入顺序
SortedSet <|-- TreeSet: 字典顺序_Comparable
%% 类定义
class Collection{
<<interface>>
+add(E) bool
+addAll(Coll) bool
+clear() void
+remove(obj) bool
+contains(obj) bool
+size() int
+toArray() obj[]
+iterator() Iterator
}
class List{
<<interface>>
+get(index) E
+set(index,e) E
+listIterator() ListIterator
+of(E... ele) List
+forEach() default
}
class ArrayList{
<<class>>
}
class LinkedList{
<<class>>
}
class Set{
<<interface>>
+of(E... ele) Set
}
class HashSet{
<<class>>
}
class LinkedHashSet{
<<class>>
}
class SortedSet{
<<interface>>
}
class TreeSet{
<<class>>
}
List
Set
HashSet:引用对象要实现hashCode()和equal()方法,不然也不会去重。
Stack
Queue
Map