本文参考:JavaSE-集合 - Zh1z3ven - 博客园 (cnblogs.com)
集合类提供一种存储空间可变的存储模型,存储数据的容量可以随时发生改变,比如ArrayList
。
集合按照存储的结构可以分为两类,分别是单列集合java.util.Collection
和双列集合java.util.Map
,这里就先来讲讲collection
集合。
Collection
1 2 3 4 5 6 7 public boolean add (E e) public void clear () public boolean remove (E e) public boolean contains (E e) public boolean isEmpty () public int size () public Object[] toArray()
Iterator迭代器
java给我们提供了Iterator
接口,也就是迭代器,该接口也是集合的一种。也是集合专用的一种遍历方式。
1 Iterator<String> it = col.iterator();
集合的iterator()
方法返回该集合元素的一个迭代器对象,之后就可以通过此对象的hashNext()
和next()
遍历这个集合。
next()
:返回迭代的下一个元素。
hasNext()
:如果仍有元素可以迭代,则返回 true,否则返回false。
List
List
接口是Collection
的子接口,
List
接口里面允许出现重复元素得,在程序中可以通过索引来访问。
List
接口存储的数据是有序的。
List
的特有方法
1 2 3 4 add(int index, Element) remove(int index) set(int index, Element) get(int index)
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public static void main (String[] args) { List<String> list = new ArrayList <>(); list.add("JavaSE" ); list.add("JS" ); list.add("Java" ); System.out.println(list); list.add(1 ,"java" ); System.out.println(list); list.remove(1 ); System.out.println(list); }
LinkedList
LinkedList集合特有方法
1 2 3 4 5 6 public void addFirst (E e) 在该列表开头插入指定的元素public void addLast (E e) 将指定元素追加到此列表末尾public E getFirst () 返回此列表第一个元素public E getLast () 返回次列表末尾元素public E removeFirst () 删除并返回此列表第一个元素public E removeLast () 删除并返回此列表最后一个元素
Set
set接口也是继承了Collection接口,也是单列集合。
set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。
HashSet
无序,不保证元素的迭代顺序
不包含重复元素的集合
1 HashSet<String> hashSet = new HashSet <>();
LinkedHashSet
上面提到HashSet是无序的,如果想要有序,就需要用到LinkedHashSet
Collections类
conections是集合的工具类。
1 2 3 4 5 6 7 8 public static <T> boolean addAll (Collection<T> c, T... elements) public static void shuffle (List<?> list) public static <T> void sort (List<T> list) public static <T> void sort (List<T> list,Comparator<? super T> )
Map
在Collection
中,元素都是单个存在的。
而map中的集合,元素是成对存在的(类似于python中的字典)
每个元素都由键和值组成,通过键可以找到对应的值。
Map接口中的方法
Map接口中的集合都有两个泛型变量,在使用时,要为两个泛型变量赋予数据类型。
两个泛型变量的数据类型可以相同,也可以不同
1 2 3 4 5 6 7 8 9 10 public V put (K key, V value) public V remove (Object key) public V get (Object key) public Set<K> keySet () public Set<Map.Entry<K,V>> entrySet()
HashMap
HashMap循环遍历value
map里面提供了一个获取所以键值的方法keyset。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class HashMapKeySetDemo { public static void main (String[] args) { HashMap<Integer, String> integerStringHashMap = new HashMap <>(); integerStringHashMap.put(1 ,"xiao" ); integerStringHashMap.put(2 ,"a" ); integerStringHashMap.put(3 ,"gou" ); Set<Integer> integers = integerStringHashMap.keySet(); for (int key : integers ) { String value = integerStringHashMap.get(key); System.out.println(value); } } }
HashMap循环遍历Key,Value
1 Set<Map.Entry<String, String>> entries = map.entrySet();
Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
1 2 public K getKey () public V getValue ()
HashMap遍历举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class HashMapEntrySetDemo { public static void main (String[] args) { HashMap<Integer, String> integerStringHashMap = new HashMap <>(); integerStringHashMap.put(1 ,"joker" ); integerStringHashMap.put(2 ,"jokerdig" ); integerStringHashMap.put(3 ,"jokerdig.com" ); Set<Map.Entry<Integer, String>> entries = integerStringHashMap.entrySet(); for (Map.Entry<Integer, String> entry : entries) { int key = entry.getKey(); String value = entry.getValue(); System.out.println("Key:" + key + " " + "Value:" + value); } } }
Hashmap的存放是无序的,如果需要有序存储数据的话,就需要用到LinkedHashMap。