(虚线框表示接口, 实线框表示普通的类,

空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象)

Java 容器(list, set, map)

 

继承Collection的主要有Set 和 List.

 

List:

ArrayList    内部实现是用数组, 随机访问速度快, 删除或插入元素速度慢。

LinkedList  内部实现是用链表, 随机访问速度慢,删除和插入元素相对较快。

平时最佳的做法可能是将ArrayList作为默认首选,只有你需要使用额外的功能,或者因为经常从表中插入或删除元素导致程序性能变差的时候,才去选择LinkedList。

Vector和Stack是过去遗留下来的类,目的只是为了支持老程序,应该在编写程序时尽量避免使用它们。

 

Set:

Hash

HashSet: 为快速查找而设计,可以认为是基于哈希表的实现。 存入HashSet的元素必须定义hashCode().

LinkedHashSet: 具有HashSet的查询速度且内部使用链表维护元素的顺序(按插入的顺序或最近最少使用顺序)

 

Tree

TreeSet:保持次序的Set,底层为树结构(红黑树)。使用它可以从Set提取有序的序列。元素必须实现Comparable接口或者在构造TreeSet时传入Comparator参数。

 

 1 class Stone {
 2     private int volume;
 3 
 4     public Stone(int volume) {
 5         this.volume = volume;
 6     }
 7 
 8     public int getVolume() {
 9         return volume;
10     }
11 
12     //...........省略..........//
13 }
14 
15 class Stick implements Comparable{
16     private int length;
17 
18     public Stick(int length) {
19         this.length = length;
20     }
21 
22     public int getLength() {
23         return length;
24     }
25 
26     @Override
27     public int compareTo(Object o) {
28         Stick st = (Stick)o;
29         return this.getLength() - st.getLength();
30     }
31 
32     //...........省略..........//
33 }
34 
35 public class MyComparator implements Comparator<Stone>{
36 
37     @Override
38     public int compare(Stone st1, Stone st2) {
39         return st1.getVolume() - st2.getVolume();
40     }
41 
42     public static void main(String[] args) {
43         new TreeSet<Stone>(new MyComparator()); //传入Comparator
44 
45         new TreeSet<Stick>(); //Stick实现了Comparable
46     }
47 }
View Code

相关文章:

  • 2021-05-04
  • 2021-06-08
  • 2021-11-24
  • 2021-12-08
  • 2022-01-14
  • 2021-11-16
  • 2022-12-23
  • 2021-06-03
猜你喜欢
  • 2021-09-05
  • 2021-06-02
  • 2022-01-09
  • 2021-08-21
  • 2021-08-27
  • 2022-03-03
  • 2021-09-24
相关资源
相似解决方案