Java学习笔记(6)List和Map集合
一、集合
Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。在Java中,集合类通常存在于java.util包中。
Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。
Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复;
List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。
Map同属于java.util包中,是集合的一部分,但与Collection是相互独立的,没有任何关系。Map中都是以key-value的形式存在,其中key必须唯一,主要有HashMap、HashTable、TreeMap三个实现类。
![](http://upload-images.jianshu.io/upload_images/5621908-7942b72db40da267.png?imageMogr2/auto-orient/strip|imageView2/2/w/1166/format/webp)
转载链接:https://www.jianshu.com/p/25aa92f8d681
二、List集合
package Java基础.集合; import java.util.ArrayList; import java.util.List; public class TestList { public static void main(String[] args) { // List是个接口,实现了Collection接口,主要有两个实现类:ArrayList和LinkedList类。 // List集合允许出现重复的元素 // List集合中的元素是有序的,可以根据索引位置来检索List集合中的元素 List<String> list = new ArrayList<String>();// 可以使用接口对象来接收具体实现接口类的new对象,创建List集合 list.add("a");// 索引为1 list.add("b"); list.add("c"); list.add("d"); list.add("a");// 元素可重复 System.out.println(list);// 打印list所有元素 System.out.println(list.get(2));// 打印下标为2的元素 list.add(1, "f");// 指定索引位置插入数据 System.out.println(list);// 打印list所有元素 List<String> l = new ArrayList<String>(); l.add("123"); l.add("456"); list.addAll(2, l); // 指定索引位置插入集合 System.out.println(list); System.out.println(list.indexOf("a"));// 获取指定元素在集合中的第一次出现的下标 System.out.println(list.lastIndexOf("a"));// 获取指定元素在集合中的最后一次出现的下标 list.remove(2);// 删除指定索引位置的数据 System.out.println(list); list.set(0, "ff"); // 根据指定下标修改元素 System.out.println(list); List<String> sublist = list.subList(2, 4);// 根据索引下标的起始位置截取一段元素形成一个新的集合,和python切片操作一样,顾头不顾尾 System.out.println(sublist); System.out.println(list.size());// 集合的长度 } }
二、Map集合
map是存储的key-value键值对,是无序的 ;
TreeMap存储Key-Value对时,需要根据Key对key-value对进行排序。TreeMap可以保证所有的Key-valued对处于有序的状态
TreeMap的key排序:
1.自然排序:TreeMap的所有的Key必须实现Comparable接口,而且所有的Key应该是同一个类的对象,否则将会抛出ClassCastException
2.定制排序:了解即可,一般只会使用自然排序
package Java基础.集合; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class TestMap { public static void main(String[] args) { Map<String,Integer> map = new HashMap<String,Integer>(); map.put("b", 1);// 通过put方法添加数据 map.put("c", 2); map.put("e", 2); System.out.println(map); System.out.println(map.get("b"));// 根据key取值 map.remove("c");// 根据key移除键值对 System.out.println(map); System.out.println(map.size()); // map集合的长度 System.out.println(map.containsKey("b"));// 判断当前集合是否包含指定的key System.out.println(map.containsValue(3));// 判断当前集合是否包含指定的value // map.clear(); // 清空map Set<String> keys = map.keySet();// 获取map集合的key集合 map.values();// 获取map集合的value集合 // 遍历map集合,类似于python中的遍历字典,通过map.keySet() for(String key:keys){ System.out.println("key:"+ key + " ,value:" + map.get(key)); } // 通过map.entrySet()遍历 Set<Map.Entry<String, Integer>> entries = map.entrySet(); for(Map.Entry<String,Integer> en:entries){ System.out.println("key:"+ en.getKey() + " ,value:"+en.getValue()); } // treeMap,自然排序使用的是字典排序, TreeMap<Integer, String> treemap = new TreeMap<Integer, String>(); // 创建treeMap集合 treemap.put(4, "a"); treemap.put(2, "a"); treemap.put(1, "a"); treemap.put(3, "a"); System.out.println(treemap); TreeMap<String, String> treemap2 = new TreeMap<String, String>(); // 创建treeMap集合 treemap2.put("b","b"); treemap2.put("c","c"); treemap2.put("d","d"); treemap2.put("ab","ab"); treemap2.put("1","sdc"); System.out.println(treemap2); } }