集合
集合:集合就是个容器,用来装东西
集合容器的特点
1.集合容器的长度是可以变化的
2.集合容器只能存储引用数据类型
3.一个集合容器中可以存储不同引用数据类型的数据
集合容器和数组容器的区别
1.集合容器的长度是可以变化的,数组容器一旦初始化长度就不能改变了
2.集合容器只能存储引用数据类型,数组容器既可以存储基本数据类型,也可以存储引用数据类型
3.一个集合容器中可以存储不同引用数据类型的数据,一个数组容器中只能存储同一种数据类型的数据
集合体系结构
Collection 单列集合的顶层接口
--List 子接口
--ArrayList 实现类
--LinkedList 实现类
--Vector 实现类
--Set 子接口
--HashSet 实现类
--TreeSet 实现类
--LinkedHashSet 实现类
Map 双列集合的顶层接口
-- HashMap 实现类
-- TreeMap 实现类
-- LinkedHashMap 实现类
-- Hashtable 实现类
-- Properties 实现类
Collection接口
常见的方法
boolean add(Object e)://添加元素
boolean addAll(Collection c)://添加集合
boolean remove(Object o)://删除元素
boolean removeIf(Predicate filter)://按照条件删除元素
void clear()://清空
int size()://集合容器长度
//数组长度:length
//字符串长度:lenght()
//集合长度:size()
boolean contains(Object o)://判断集合容器中是否包含指定元素
boolean isEmpty()://判断集合容器是否为空的
Object[] toArray()://将集合容器转换成数组容器
Iterator<E> iterator()://获取迭代器对象
Collection集合的遍历
//方式一:转数组遍历
Object[] objs = c.toArray();
for(int i = 0; i < objs.length; i++) {
System.out.println(objs[i]);
}
//方式二:迭代器遍历
Iterator it = c.iterator();
while(it.hasNext()) {
//在使用迭代器时不可以使用集合自带的方法对集合内容进行修改
//否则会发生并发修改异常
Object obj = it.next();
System.out.println(obj);
}
//方式三:增强for循环(foreach)遍历
增强for循环的格式:
for(数据类型 变量名(元素名) : 要遍历的容器的名字) {
}
for(Object obj : c) {
System.out.println(obj);
}
//注意:增强for循环,底层使用的还是迭代器
List接口
List集合的特点
1.有序的(存入的顺序和取出的顺序是一样的)
2.元素可以重复的
3.有索引的
常见的成员方法
//和Collection是一样
void add(int index, Object element)://在指定的索引处添加元素
Object get(int index)://获取指定索引处的元素
Object remove(int index)://删除指定索引处的元素
Object set(int index, Object element)://修改指定索引处的元素,返回被修改的数据
List集合的遍历
//方式一:转数组
Object[] objs = list.toArray();
for (int i = 0; i < objs.length; i++) {
System.out.println(objs[i]);
}
//方式二:迭代器遍历
Iterator it = list.iterator();
while(it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
//方式三:增强for
for(Object obj : list) {
System.out.println(obj);
}
//方式四:普通for
for(int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
System.out.println(obj);
}
ArrayList实现类
ArrayList集合的特点1.有序的(存入的顺序和取出的顺序是一样的)2.元素可以重复的3.有索引的
底层数据结构:数组数据结构
常见的构造方法?
public ArrayList();
常见的成员方法
和List一样的
LinkedList实现类
LinkedList集合的特点?1.有序的(存入的顺序和取出的顺序是一样的)2.元素可以重复的3.有索引的
底层数据结构:双向链表数据结构
常见的构造方法
public LinkedList()
常见的成员方法
//和List一样的
public void addFirst(Object e)://将元素添加到第一个位置
public void addLast(Object e)://将元素添加到最后一个位置
public Object getFirst()://获取第一个位置的元素
public Object getLast()://获取最后一个位置的元素
public Object removeFirst()://删除第一个位置的元素
public Object removeLast()://删除最后一个位置的元素
Set接口
Set集合的特点
1.不保证顺序(存入的顺序和取出的顺序是不一样的)
2.元素唯一
3.无索引
常见的成员方法:和Collection中的方法是一样
TreeSet实现类
TreeSet集合的特点
1.不保证顺序(存入的顺序和取出的顺序是不一样的)
2.元素唯一
3.无索引
4.可以排序的(由小到大)
TreeSet的数据结构:树型结构中红黑树
常见的成员方法:和Set中的方法是一样
存储自定义对象
如果我们想要使用TreeSet来存储自定义对象的话,要满足两个条件之一才可以正常运行条件一:自然排序Comparable条件二:比较器Comparator
实现自然排序
1.自定义类,实现Comparable接口
2.重写抽象方法compareTo()
3.在compareTo()方法中写比较规
返回值为0:集合中的元素只有一个
返回值为正数:集合中的元素是正序
返回值为负数:集合中的元素是倒数
实现比较器
1.自定义类
2.创建TreeSet集合对象,在构造方法中传递Comparator的对象
3.重写compare()方法
4.在compare()中写比较规则
返回值为0:集合中的元素只有一个
返回值为正数:集合中的元素是正序
返回值为负数:集合中的元素是倒数
HashSet实现类
特点:1.无序的2.元素唯一的3.无索引
数据结构:哈希表
常见的方法:和Set方法是一样的
LinkedHashSet实现类
特点:
1.有序的
2.元素唯一的
3.无索引
MAP接口
特点:
1.无序的
2.无索引
3.元素唯一的 键唯一 值可以重复
4.双列的
常见的方法
V put(K key,V value):
//1.添加元素
//2.修改,返回被修改前的值s
V remove(Object key)://根据键来删除元素,返回被删除的元素的值
int size()://获取集合容器的长度
void clear()://清空
V get(Object key)://根据键获取值
boolean containsKey(Object key)://判断是否包含指定的键的元素
boolean containsValue(Object value)://判断是否包含指定的值的元素
Set<K> keySet()://将map集合中的所有的键获取到,扔到Set集合中
Collection<V> values()://将map集合中的所有的值后去到,扔到Collection集合
Set<Map.Entry<K,V>> entrySet()://将键值对对象扔到Set集合中
HashMap实现类
特点:
1.无序的
2.无索引
3.元素唯一的键唯一值可以重复
4.双列的
数据结构:哈希表,HashSet底层使用的就是HashMap
常见的方法:和Map集合中的方法是一样的
TreeMap实现类
特点:
1.无序的
2.无索引
3.元素唯一的键唯一值可以重复
4.双列的
5.可以排序的(根据键来排序)
数据结构:红黑树,TreeSet底层使用的就是TreehMap
常见的方法:和Map集合中的方法是一样的