Java中List常用API整理
List接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来。
1 collection的API介绍
1.1 boolean add(E e)
添加元素到Collection集合中。
1.2 boolean addAll(Collection<? extends E> c)
将指定c中的所有元素都添加到此Collection集合中。
1.3 void clear()
移除此collection集合中的所有元素
1.4 boolean contains(Object o)
检查Collection集合中是否包含o对象,如果包含则返回true,否则返回false。
1.5 boolean containsAll(Collection<?> c)
检查Collection集合中是否包含c的全部对象,全部包含则返回true,否则返回false。
1.6 boolean equals(Object o)
比较此collection集合与指定对象是否相等,是比较的是里面元素是否相等,而不是比较地址是否相等。
在Object类中,equals()方法底层就是“==”,也就是说就是比较地址是否相等,但是继承后,大多数的类都重写了该方法。
由于Collection是接口,不能直接new对象,所以只能new一个它的子类。
下面这个是Object类的equals()方法,底层就是用"=="。
下面我们来看Collection的一个实现类Vector。
Vector是继承了AbstractList
所以它的equals方法是调用了父类的方法
我们再跟进去看看。真的是重写的equals方法
1.7 int hashCode()
返回此Collection集合的哈希码值。
1.9 boolean isEmpty()
检查Collection集合是否包含有元素,如果没有包含元素,则返回true,否则返回false。
此方法与contains方法的区别是,此方法是判断集合是否包含有元素,就是说,如果一个元素都没有的话就返回true,如果有一个或者以上就返回false。
contains的方法是判断集合中是否包含特定的元素,如果包含特定的元素就返回true,如果没有包含特定元素就返回false。
1.9 Iterator<E> iterator()
返回在此collection集合的元素上进行迭代的迭代器
注意:迭代过程中不能用集合里的添加、删除等方法修改集合,不然会报错。
如果想在迭代过程中还想操作集合,那么只能用迭代器类里面的方法。
1.10 boolean remove(Object o)
从collection集合中删除指定的元素,如果集合中有这个元素,并且删除成功,那么就返回true,否则返回false。
1.11 boolean removeAll(Collection<?> c)
从集合中删除c集合中所有的元素
1.12 boolean retainAll(Collection<?> c)
集合中仅保留c集合中的所有元素
1.13 int size()
返回集合中元素个数
1.14 Object[] toArray()
返回包含此collection集合中所有元素的数组
2 关系介绍
Map<K,V>是键值对,K - 此映射所维护的键的类型,V - 映射值的类型。键值是一一对应的关系;
Collection是只有键,底层也是由键值对,但是值的类型被隐藏起来。
2.1 Collection
List里面可以放重复的元素,Set里面不可以放重复的元素。
1、ArrayList底层是用数组实现的,LinkedList底层是用链表实现的,Vector底层也是用数组实现的。
2、HashSet底层是哈希算法实现的,TreeSet底层是用二叉树实现的,LinkedHashSet底层是用链表实现的。
2.2 Map
1、HashMap底层是哈希算法实现的,TreeMap底层是用二叉树实现的,Hashtable底层是哈希算法实现的,LinkedHashMap底层是用链表实现的。
Vector、Hashtable是线程安全的;
ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap、LinkedHashMap是线程不安全的。
3 list常见API整理
3.1 void add(int index, E element)
在指定位置插入元素,后面的元素都往后移一个元素。
3.2 boolean addAll(int index, Collection c)
在指定的位置中插入c集合全部的元素,如果集合发生改变,则返回true,否则返回false。
意思就是当插入的集合c没有元素,那么就返回false,如果集合c有元素,插入成功,那么就返回true。
3.3 E get(int index)
返回list集合中指定索引位置的元素
3.4 int indexOf(Object o)
返回list集合中第一次出现o对象的索引位置,如果list集合中没有o对象,那么就返回-1
3.5 ListIterator<E> listIterator()
返回此列表元素的列表迭代器(按适当顺序)。
listIterator和iterator的区别是什么呢?下面这篇博客比较详细的分析,可以参考。
https://blog.csdn.net/longshengguoji/article/details/41551491
这里大概讲一下他们的区别:
当只需要遍历集合时,两个迭代器的功能都是一样。
但是listIterator迭代器只能用于List和他的实现子类,iterator迭代器可以用于所有的集合使用。
所不同的就是listIterator迭代器的功能会比iterator迭代器的功能要多。
listIterator迭代器可以在遍历集合时添加、修改和删除,而iterator迭代器在遍历集合时只有删除。
3.6 ListIterator<E> listIterator(int index)
从指定位置开始,返回此列表元素的列表迭代器(按适当顺序)。
和上面那个迭代器不同的就是多了一个参数,就是能控制迭代器开始的位置。
3.7 E remove(int index)
删除指定索引的对象
3.8 E set(int index, E element)
在索引为index位置的元素更改为element元素
3.9 List<E> subList(int fromIndex, int toIndex)
返回从索引fromIndex到toIndex的元素集合,包左不包右
4 set常见API整理
Set集合与List集合的区别就是,Set集合的元素不能重复,List集合的元素是可以重复的。
4 map常用API整理
Map集合和Collection集合的区别
Map集合是有Key和Value的,Collection集合是只有Value。
Collection集合底层也是有Key和Value,只是隐藏起来。
4.1 V put(K key, V value)
向map集合中添加Key为key,Value为value的元素,当添加成功时返回null,否则返回value。
就是说Map集合中的Key是不能重复的,这就类似于Set集合中元素不能重复,但是Map集合中的Value是可以重复。
4.2 void putAll(Map<? extends K,? extends V> m)
向map集合中添加指定集合的所有元素
4.3 void clear()
把map集合中所有的键值删除
4.4 boolean containsKey(Object key)
检出map集合中有没有包含Key为key的元素,如果有则返回true,否则返回false。
4.5 boolean containsValue(Object value)
检出map集合中有没有包含Value为value的元素,如果有则返回true,否则返回false。
4.6 Set<Map.Entry<K,V>> entrySet()
返回map到一个Set集合中,以map集合中的Key=Value的形式返回到set中。
补充:一般我们遍历HashMap的时候,推荐是用这种方式。不用再通过map的get(key)方法拿值,性能会提升。参考sonar代码规范
4.7 boolean equals(Object o)
判断两个Set集合的元素是否相同
底层也是重写了equals方法
查看HashMap集合时,没有发现equals方法,那么我们就去找他的父类。
4.8 V get(Object key)
根据map集合中元素的Key来获取相应元素的Value
4.9 int hashCode()
返回map集合的哈希码值
4.10 boolean isEmpty()
检出map集合中是否有元素,如果没有则返回true,如果有元素则返回false
4.11 Set<K> keySet()
返回map集合中所有Key
4.12 V remove(Object key)
删除Key为key值的元素
4.13 int size()
返回map集合中元素个数
4.14 Collection<V> values()
返回map集合中所有的Value到一个Collection集合
5 hashMap的API整理
5.1 public Object clone()
返回hashMap集合的副本
其余的方法都是实现Map集合的, 见上。
6 hashTable的API整理
6.1 public Object clone()
返回Hashtable的副本
6.2 public Enumeration<V> elements()
返回此哈希表中的值的枚举
其他的方法都是实现Map集合的方法
7 TreeMap的API整理
7.1 public Map.Entry<K,V> ceilingEntry(K key)
返回指定的Key大于或等于的最小值的元素,如果没有,则返回null
7.2 public K ceilingKey(K key)
返回指定的Key大于或等于的最小值的Key,如果没有,则返回null
7.3 public Object clone()
返回集合的副本
7.4 public Comparator<? super K> comparator()
如果使用默认的比较器,就返回null,如果使用其他的比较器,则返回比较器的哈希码值
7.5 public NavigableSet<K> descendingKeySet()
返回集合的全部Key,并且是逆序的
7.6 public NavigableMap<K,V> descendingMap()
把集合逆序返回
7.8 public Map.Entry<K,V> firstEntry()
返回集合中最小Key的元素
7.9 public K firstKey()
返回集合中最小Key的key
7.10 public Map.Entry<K,V> floorEntry(K key)
与ceilingEntry()方法相反,是返回小于等于key的最大Key的元素
7.11 public K floorKey(K key)
返回小于等于key的最大Key的key
7.12 public SortedMap<K,V> headMap(K toKey)
返回Key小于toKey的所有元素
7.13 public NavigableMap<K,V> headMap(K toKey, boolean inclusive)
当inclusive为true时,就是返回Key小于等于toKey的所有元素
7.14 public Map.Entry<K,V> higherEntry(K key)
返回Key大于key的所有元素
7.15 public K higherKey(K key)
返回Key大于key的所有Key
7.16 public Map.Entry<K,V> lastEntry()
返回Key最大的元素
7.17 public K lastKey()
返回Key最大的Key
7.18 public Map.Entry<K,V> lowerEntry(K key)
返回小于key的最大元素
7.19 public K lowerKey(K key)
返回小于key最大的Key
7.20 public Map.Entry<K,V> pollFirstEntry()
删除key最小的元素
7.21 public Map.Entry<K,V> pollLastEntry()
删除最大Key的元素
7.22 public NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
截取集合中Key从fromKey到toKey的元素,否是截取他们本身,取决于true或者false
7.23 public SortedMap<K,V> subMap(K fromKey, K toKey)
截取集合中Key从fromKey到toKey的元素,包括fromKey,不包括toKey
7.24 public SortedMap<K,V> tailMap(K fromKey)
截取Key大于等于fromKey的所有元素
7.25 public NavigableMap<K,V> tailMap(K fromKey, boolean inclusive)
当inclusive为true时,截取Key大于等于fromKey的所有元素,否则截取Key大于fromKey的所有元素
8 其余注意点
- list 里面可以嵌套list
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args){
List<List<List<String>>> listListList = new ArrayList<List<List<String>>>();
List<List<String>> listList = new ArrayList<List<String>>();
List<String> list = new ArrayList<String>();
list.add("test");
listList.add(list);
listListList.add(listList);
System.out.println(listListList);
}
}