集合day01
Collection:集合的顶层接口,定义了集合中通用的功能方法,可以使用多态的方式创建子类对象
boolean add(Object e) //添加元素
void clear() //清空集合
boolean remove(Object o) //删除元素
boolean contains(Object o) //判断当前集合是否包含某元素
boolean isEmpty() //判断当前集合是否为空
int size() //返回集合中元素的个数
Object[] toArray() //把集合中的元素,存储到数组中
迭代器:Collection接口的方法 Iterator<E> iterator() 返回的是调用方法的集合的专属迭代器接口,其实现类一定会重写此方法,返回Iterator接口的实现类对象
Iterator iterator() //迭代器,用来遍历集合中的元素的
Iterator两个方法:
hasNext() 判断集合是否有下一个元素
next() 取出下一个元素
增强for循环:
作用:遍历集合或数组
格式:for(集合中元素数据类型 变量名:要遍历的集合或数组){
System.out.println(变量名);
}
定义一个泛型类:
Public class 类名<变量名>{ }
确定泛型类型:创建对象时确定泛型的数据类型。
定义一个泛型方法:
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
确定泛型类型:调用方法时确定泛型的类型。
定义泛型接口:
Public interface 接口名<变量名> { }
确定泛型类型:
(1)定义实现类时确定泛型类型
(2)定义实现类时没确定泛型类型,创建实现类对象时再确定泛型类型
泛型通配符 ?
泛型的限定:
?extends 父类 (上限限定)只能传父类对象及子类对象
?extends 父类 (下限限定)只能传父类对象及父类的父类对象
集合day02
List接口集合:
java.util.List 特点:有序、有索引、可重复
其实现类:ArrayList、LinkedList
public boolean add(E e) 向集合末尾处添加指定的元素
public void add(int index, E e) 向集合指定索引处,添加指定的元素,原有元素依次后移
public boolean remove(E e) 将指定元素对象从集合中删除
public E remove(int index) 将指定索引处的元素,从集合中删除,返回值为被删除的元素
public E set(int index, E e) 将指定索引处的元素,替换成指定的元素,返回值为替换前的元素
public E get(int index) 获取指定索引处的元素,并返回该元素
java.util.ConcurrentModificationException并发修改异常
使用迭代器迭代集合时,如果对集合的长度进行了改变就会报此异常
List集合特有的迭代器,有添加方法,方法如下:
ArrayList<String> list = new ArrayList<String>();
ListIterator<String> listIterator = list.listIterator();
java.util.ArrayList
特点:有序、有索引、可重复
底层数据是数组,查找快,增删慢;线程不安全,效率高
Public boolean contains(Object o)判断集合中是否包含指定的元素,以equals方法来进行比较
java.util.LinkedList
特点:有序、有索引、可重复
底层数据是链表,查找慢,增删快;线程不安全,效率高
public void addFirst(E e) 将指定元素插入此列表的开头
public void addLast(E e) 将指定元素添加到此列表的结尾
public E getFirst( ) 返回此列表的第一个元素
public E getLast( ) 返回此列表的最后一个元素
public E removeFirst( ) 移除并返回此列表的第一个元素
public E removeLast( ) 移除并返回此列表的最后一个元素
Set接口集合:
java.util.Set 特点:不可重复
其实现类:HashSet、LinkedHashSet
在Object类中
int hashCode()方法,返回的是对象的哈希值。
Object类的hashCode()方法,返回的是通过地址值计算得到的哈希值(只要对象的地址不同,哈希值就是不同的)。
子类可以重写hashCode()方法,返回的是子类重写后随意返回的值。
java.util.HashSet
特点:无序、不可重复、底层结构为哈希表;查询和增删都较快
HashSet保证了元素唯一,需要借助hashCode()和equals()
String类对hashCode()进行了方法重写,是根据字符串的内容进行计算,得到一个数(字符串的内容不同,hashCode计算得到的值就不同),但是也会有极少数的情况,字符串内容不同,但hashCode计算出的值相同,因此再借助equals()方法。
自定义类需要手动(快捷键生成也行)重写hashCode()方法,引用数据类型直接调用其hashCode(),基本数据类型直接就是值本身。
先用hashCode()方法进行比较哈希值
不同——>直接添加到HashSet集合中
相同——> 再用equals()方法进行比较内容
不同——>添加到HashSet集合中
相同——>则不添加进HashSet集合
java.util.LinkedHashSet
特点:有序、不可重复、底层结构为链表+哈希表
【哈希表由数组和链表组成(每个数组元素都是一个链表)】
集合day03
Map:双列集合的顶层接口
Java.util.Map 存放的键值对
两个实现类:HashMap、LinkedHashMap
V put(K key, V value) 将一对元素存放到map集合中,返回值一般都是null,但是有相同键覆盖时,会把覆盖前的值返回
V get(Object key) 根据键取出值
V remove(Object key) 根据键进行删除一对元素,将删除的值返回
Set<K> keySet() 返回所有键的set集合
Set<Map.Entry<K,V>> entrySet() 获取所有键值对对象
Map集合遍历的两种方式:
(1)根据键找值 (2)根据键值对对象找键和值
HashMap:无序、键唯一、底层结构:哈希表
LinkedHashMap:有序,键唯一、底层结构:哈希表+链表
键的唯一是通过重写hashCode()与equals()方法来保证键的。
集合工具类Collections(java.util.Collections)的方法:
Int binarySearch(List li, 元素类型 key) 对list集合二分查找
public static<T> void sort(List<T> list) 对list集合进行排序
public static void shuffle(List<?> list) 将List集合中的元素存储位置随机打乱
可变参数 本质上就是一个数组
前提:参数类型确定、参数个数不确定,可以使用可变参数
使用方式:方法名 (参数类型 ... 变量名)
可变参数的注意事项:
(1)一个方法中只能有一个可变参数
(2)如果方法中有多个参数,可变参数放在最后