集合
集合:面对对象语言对事物的体现都是以对象的形式,为了方便多个对象的操作和存储,Java就提供了集合类来使用
数组和集合的区别:
1.数组的长度固定,集合的长度是可变的
2.数组可以存放基本数据类型, 也可以存放引用数据类型,集合只能存放引用数据类型
3.数组只能存放同一种数据类型,集合可以存放不同的数据类型
Collection
集合层次结构的根,单列集合
声明:public interface Collection extends Iterable
List
LIst:有序(存储的顺序和去取出的顺序一致)集合,可重复,继承自Collection
声明:public interface List extends Collection
ArrayList
ArrayList:可调整大小的数组实现List接口,底层是数组的集合,是线程不安全的,Vector是线程安全的,它相对于LinkedList而言查询块
构造方法:
public ArrayList();构造一个初始容量为10的空列表
成员方法:
public bolean add(E e);将指定的元素追加到此列表的末尾
public void add(int index,E element);在集合中指定位置插入指定元素
public boolean addAll(Collection C);按指定集合的Iterator返回的顺序追加到末尾
public boolean addAll(int index,Collection C);插入结合在指定位置
public void clear();清空集合
public remove (int index);删除指定位置的元素,根据索引删除
public boolean remove(Object o);删除指定第一次出现的元素
public boolean removeAll(Collection C);删除两个集合的交集
public E set(int index,E element);用指定元素替换指定位置元素
public int indexOf/lastIndexOf(Object O);返回指定元素出现的第一次/最后一次的索引,不包括这个元素就返回-1
public int size();返回集合个数
public List subList(int fromIndex, int toIndex);返回指定范围集合
public Object[] toArray();把集合转数组
public boolean contains(Object O);有没有指定的元素
public boolean isEmpty();空集合就true
public Iteratro iterator();迭代器
Iterator
Iterator遍历集合
成员方法:
boolean hasNext();判断下一个有没有元素,有元素返回true
E next();返回迭代中的下一个元素
LinkedList
LinkedList:双链表实现了List和Deque接口,并允许所有元素,包括null
底层是链表的集合,它相对于ArrayList而言增删块
构造方法:
public Linked List();构造一个空列表
成员方法(与ArrayList一样,这是独有方法):
public void addFirs/addLast(E e);开头/结尾插入指定元素
public E getFirs/getLast();返回列表开头/结尾的元素
public E removeFirst/removeLast();删除开头/结尾的元素
Set
Set:不包含重复元素的集合,唯一
声明:public interface Set extends Collection
HashSet
HashSet:实现Set接口类,由哈希表算法换算得内存地址16进制数,无序,唯一
构造方法:
public HashSet();默认初始容量
TreeSet
TreeSet基于TreeMap实现的
TreeSet中含有一个NavigableMap类型的成员变量m,而m实际上是
TreeMap的实例
声明:public class TreeSet extends AbstractSet implements NavigableSet
构造方法:
public TreeSet(); 空,根据元素的自然排序进行排序
Comparable接口的方法:int compareTo(T o) 将此对象与指定的对象进行比较以进行排序
参数o是要比较的对象
底层的数据结构是红黑树(平衡二叉树)
Map
Map存放键值对,双列集合根接口,键唯一,与值一一对应,值不唯一
声明:public Interface Map<K, M> K:键 M:值 把键映射到值的对象
HashMap
HashMap:基于哈希表的实现Map接口的类,并允许有n个null的值,一个null键
声明:public class HashMap<K,V> extends AbstractMap<K,V>
HashMap是线程不安全的,Hashtable是线程安全的
LinkedHashMap 继承自 HashMap,具有高效性,同时在 HashMap 的基础上,又在内部增加了一个链表,用以存放元素的顺序
构造方法:
public HashMap();默认初始容量是16
成员方法:
public V put(K key,V value);添加一个键值对
public V put(K key, V vale);当键相同,覆盖值
pulic void putAll(Map p);添加一个Map集合
public V get(Object key);返回指定键所对应的值
public boolean containKey/Value(Object K/V);是否包括指定键/值
public Set KeySet();获取所有键放在Set集合中
public Collection values();获取值
public Set entrySet();获取键值对
public boolean isEmpty();是否为空
Map.Entry键值对:
public static interface Map.Entry<K , V>
方法:
public K getKey();返回此键对应的键
public V getValue();返回值
TreeMap
TreeMap是一个有序的Key-Value集合,它是红黑树(Red-Black tree)实现的,该映射根据其键的自然排序进行排序,或者根据创建映射时提供的Comparatror进行排序,具体取决于使用的构造方法
Collections
Collections:由静态方法组合,操作类,多态算法,返回指定集合的新集合
声明:public class Collections extends Object
方法:
public static void sort(List list);升序
public static T max/min();返回最大值/最小值
public static void reverse(List list);反转
public static void shuffle(List list);随机置换
Comparator
想要比较两个属性,自然排序,调用重写compareTo方法