数组
1.数组的大小是固定的
int a[]=new int[5];
2.数组是一种一尾的结构
范型
Vector,Arraylist ->通过数组保存放入的内容(扩容.减容)
在频繁插入.删除的情况下。性能低
0(1)
Vector -> 线程安全的
ArrayList ->非线程安全的
LinkedList ->使用双向链表实现
get实现速度慢 0(n)
非线程安全的
TreeSet -> 数据有序
二分法
26
50>25>37>31>28>27>26
2^(n-1)>100
n条记录 log2 N
插入.删除性能低
查找:性能最高
Comparable (比较类要实现这个接口)
HashSet -> 分类
100万数据 ->Set
n=100
要把数据转换为一个数字%n ->余数 分类依据
m -> 数字%n ->余数
优点:插入删除性能高0
查找:性能较高
(比较类要实现这个接口)
Object::hashCode ->把数据转换成内存地址(数字) (此处是重点)
Object::equals ->按照索引判断 (实现这两个方法可以直接在Eclipse中自动生成)
(以上是线性的)
(下面是集合的键值对)
HashMap
Hashtable 线程安全的 Properties Java中的配置文件常用(重点)
TreeMap
各种集合的比较
一.ArrayList与Vector :
1.相同点 : a.可以重复添加元素 . b.按索引查找元素
2.不同点 : a.线程安全性(ArrayList是不安全的,但效率高,一般建议采用ArrayList)
b.都有一个初始容量,其中Vector提供了设置增长空间的方法
二.HashMap和Hashtable
主要从三方面来说:
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
三.List 和 Map 区别
List : 存储单列数据的集合,数据是有顺序,并且允许重复
Map : 存储键和值这样的双列数据的集合,存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的
四.List, Set, Map是否继承自Collection接口?
List,Set是,Map不是
五.List、Map、Set三个接口,存取元素时,各有什么特点?
以下是它们3个最重要的特点:
List 以特定次序来持有元素,可有重复元素。
Set 无法拥有重复元素,内部排序。
Map 保存key-value值,value可多值。
六. LinkedList
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,
但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
(重点)LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。
七、Collection 和 Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
八.常用集合类及对应的接口
最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操 作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
ArrayList/Vector >>List
HashSet/TreeSet >>Set Collection(接口)
Propeties/HashTable
TreeMap/HashMap Map(接口)
九.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
对。
如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等。
如果不是要保存在HashSet或HashMap,则与hashcode没有什么关系了,这时候hashcode不等是可以的
例如arrayList存储的对象就不用实现hashcode,当然,我们没有理由不实现,通常都会去实现的。
(HashSet实现 hashCode()和equals(Object obj)的函数(在操作类里实现))
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + score;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (score != other.score || !name.equals(other.name)) //主要是在这里规范添加数据的比较机制
return false;
return true;
};