目录
1.集合概述
1.1基本概念
- 集合实际上是一个容器,可以容纳其他类型的数据
- 集合不能存储基本数据数据类型,也不能直接存储java对象,存储的都是java对象的内存地址(引用)list.add(100);//自动装箱为Integer
- 集合在java中本身也是也是一个对象
- 集合底层对应不同的数据结构,常见的数据结构:数组、链表、哈希表、二叉树
1.2集合的继承结构图
java中集合分为两大类:
- 单个方式存储元素,这一类集合中超级父接口:java.util.Collection
- 以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map
1.2.1Collection集合继承关系
1.2.2Map集合继承关系
1.3常用集合存储元素的特点
List:
- 有序可重复
- 有序:存取顺序相同,每个元素都有下标
- 可重复:可存储指向相同值的引用
Set(Map):
- 无序不可重复
- 无序:存取顺序不一定相同,集合中元素没有下标
- 不可重复:不可存储指向相同值的引用
- Map集合中的key,就是一个Set集合(在Set集合中放数据,实际上放到了Map集合的key部分)
SortedSet(SortedMap):
- 关联Set(Map),无序不可重复,但是集合中的元素可以排序
- 无序:存取顺序不一定相同,集合中元素没有下标
- 不可重复:不可存储指向相同值的引用
- 可排序:可以按照大小顺序排序
1.4总结常用的实现类
- ArrayList:底层是数组
- LinkedList:底层是双向链表
- Vector:底层是数组,线程安全,效率低,使用较少
- HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合中key部分
- TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合中key部分
- HashMap:底层是哈希表
- Hashtable:底层也是哈希表,线程安全,效率低,使用较少
- Properties:线程安全,key和value只能存储字符串String
- TreeMap:底层是二叉树,TreeMap集合中的key可以自动按照大小顺序排序
2.Collection和Iterator
2.1Collection的常用语法
Collection中可以存储object的所有子类,使用泛型后,只能存储摸个具体的类型
2.1.1常用语法
//Collection c =new Collection(); 接口是抽象的,无法被实例化
Collection c = new ArrayList();//多态
//boolean add(E e)
c.add(1200);//自动装箱(JDK5)放进去的是一个对象的内存地址
c.add(new Object());
//int size()
System.out.println("集合中元素的个数为:"+c.size());
//void clear() 清空集合
c.clear();
//boolean contains(E e)
boolean flag1 = c.contains("猫猫");//fales
boolean flag2 = c.contains(1200);//true
//boolean remove(E e)
c.remove(1200);
//boolean isEmpty()
System.out.println(c.isEmpty());
//Object[] toArray()
Object[] objs = c.toArray();
2.1.2contains()与remove()
存放在集合中的类型,一定要重写equals方法
contains()方法调用equals()方法进行比对,equals返回true,就表示包含
String、Integer…已经重写了equals方法
remove()方法底层也调用equals()方法
Collection c =new ArrayList();
String s1 = new String("hello");
String s2 = new String("hello");
c.add(s1);
c.remove(s2);
System.out.println(c.size());// 0
Collection c =new ArrayList();
String s1 = new String("abc");
String s2 = new String("def");
String x = new String("abc");
c.add(s1);
System.out.println(c.contains(x));//true
public class Test{
class User{
private String name;
public User(){
};
public User(String name){
this.name = name;}
public boolean equals(Object o){
if(o == null)||!(o instanceof User)) return false;
if(o == this) return true;
User u = (User)o;
return u.name.equals(this.name);
}
}
public static void main(String[] args){
Collection c = new ArrayList();
User u1 = new User("jack");
User u2 = new User("jack");
c.add(u1);
System.out.println(c.contains(u2));
//没有重写equals之前,false;重写equals后,ture
}
}
2.2迭代器
Map集合中不能使用迭代器遍历/迭代,在所有Collection以及子类中使用
Collection c = new HashSet();
c.add("abc");
c.add("def");
c.add(100);
Iterator it = c.iterator