集合:存储对象的容器。
*
* 数组和集合区别:
* 长度:
* 数组一旦创建长度不可改变
* 集合长度可变
* 存储元素:
* 数组可以存储基本数据类型和引用数据类型
* 集合只能存储引用类型
Collection
添加功能:
* boolean add(Object e):添加任意对象
*
* 删除功能:
* void clear():移除所有元素
* boolean remove(Object o):删除一个元素
*
* 判断功能:
* boolean contains(Object o):判断集合中是否包含某个对象
* boolean isEmpty():判断集合是否为空
*
* 获取功能:
* int size():获取集合的长度
* 数组长度:length 字符串长度:length()
*
*Object[] toArray():集合转为Object数组
*
* boolean addAll(Collection c):添加一个集合的元素
* boolean removeAll(Collection c):删除两个集合中相同的元素
* boolean containsAll(Collection c):判断集合中是否包含另一个集合中的所有元素
* boolean retainAll(Collection c):将两个集合中重复的元素保留,如果集合改变返回true,不改变返回false
*Iterator iterator():迭代器遍历集合
List集合
* void add(int index, E element):在指定位置添加元素(掌握)
* E get(int index):获取指定位置上的元素(掌握)
* E set(int index, E element):修改指定位置的元素(掌握)
* E remove(int index):删除指定元素(掌握)
List三个实现类的特点:
ArrayList:底层数组,查询快,增删慢。
线程不安全,效率高。
Vector:底层数组,查询快,增删慢。
线程安全,效率低。
LinkedList:底层链表,查询慢,增删快。
Vector独有方法:
* 独有方法:
* void addElement(E obj): -- add()
* E elementAt(int index): -- get()
* boolean removeElement(Object obj): -- remove(Ojbect obj)
* void setElementAt(E obj, int index): -- set()
* E firstElement():
* E lastElement():
LinkedList独有方法:
* void addFirst(E e)
* void addLast(E e)
* E getFirst()
* E getLast()
* E removeFirst()
* E removeLast()
泛型
* 泛型:创建集合是明确集合中存储的数据类型。
* 语法:(掌握)
* <引用数据类型>
*
* 泛型好处:
* 1.避免了强制类型转换
* 2.将运行时期错误提前到编译时期
* 3.解决了黄色警告线
泛型可以应用在类、方法、接口。
应用在类语法:public class 类名<泛型>{}
应用在方法上:public <泛型> 返回值类型 方法名(泛型 e){}
应用在接口上:interface 接口名<泛型>{}
forEach
* forEach:遍历数组集合
* 语法:(掌握)
* for(元素的数据类型 变量名:数组或者集合的名称){
* 使用该变量,该变量就是每一个元素
* }
快捷键:foreach+alt+/
注意:
1.底层迭代器
好处:
简化了遍历代码
TreeSet
特点:排序,唯一。
LinkedHashSet
特点:有序,唯一。
Map
* collection和Map的区别?
* collection每次存储一个元素,Set集合是不可重复,List集合是可重复。
* Map集合每次存储两个元素,键不可重复,值可重复。
* Map接口中的方法:
* 添加功能:
* V put(K key, V value):当键第一次存储返回null,接下来每一次存储返回上一次的值。
* 删除功能:
* void clear()
* V remove(Object key):根据键删除键值对,返回值。
* 获取功能:
* Set<Map.Entry<K,V>> entrySet():得到的是每一组键值对,存放在一个Set集合中。
* Set<K> keySet():得到所有的键
* Collection<V> values():得到所有的值
* V get(Object key):根据键得到值。
* int size():获取集合中总共几对元素。
* 判断功能:
* boolean containsKey(Object key):是否包含指定的key
* boolean containsValue(Object value):是否包含指定的value
* boolean isEmpty():集合是否为空
Map集合遍历方式1:
* 1.得到所有的键存放在Set集合中 -- keySet()
* 2.遍历键所在的集合,得到每一个键
* 3.通过当前的键得到对应的值
代码:
Set<泛型> keys = 集合名.keySet();
for(泛型 key: keys){
值的数据类型 value = 集合名.get(key);
}
* Map遍历第二种方式:
* 1.拿到每一个键值对存储在集合中
* 2.遍历键值对所在的集合,拿到每一组键值对
* 3.通过该键值对,获取键,获取值
代码:
Map<String, String> map = new HashMap<String, String>();
Set<Map.Entry<String, String>> entrys = map.entrySet();
for(Map.Entry<String, String> entry:entrys){
//K getKey():返回与此项对应的键。
//V getValue():返回与此项对应的值。
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+" "+value);
}
HashMap
注:使用HashMap集合存储键值对,自定义对象作为键,需要在类中覆盖hashCode()和equals()方法。
* HashMap和Hashtable的区别?
* HashMap可以存储null键和null值,线程不安全,效率高
* Hashtable不可以存储null键和null值,线程安全,效率低