1、集合结构的总体关系图
2、collection 顶层父接口
3、List 接口 (list的实现类相当于python中的列表list,类似于动态数组,里面的元素
排列是有顺序的,可以通过索引访问元素。)
1)ArrayList
示例1:
Map<String, Object> book = new HashMap<>(); book.put("name", "互联网世界观"); book.put("isbn", "9877234623432"); book.put("author", "李善友"); Map<String, Object> book2 = new HashMap<>(); book2.put("name", "程序员的思维修炼"); book2.put("isbn", "12312312"); book2.put("author", "auhi"); List<Map> contents = new ArrayList<>(); contents.add(book); contents.add(book2); Map<String, Object> pagemap = new HashMap<>(); pagemap.put("page", page); pagemap.put("size", size); pagemap.put("content", contents); return pagemap;
示例2:
运行结果:
示例3:元素的第二种遍历方法
运行结果:
2)LinkList
示例1:
运行结果:
示例2:
4、Set接口 (SET接口相当与python中的元组,里面的元素的排序是无序的,不可以保存
值相同的元素,即重复元素)
1)HashSet
示例1:
示例2:
2)TreeSet
示例1:
以字母的顺序输出。
示例2:
运行结果:
5、Map接口 (Map接口相当于python中的字典,每个元素都有键值对),前面所述的集合,
都是储存单个的值,排列顺序有 有序的,无序的,都没有键,有序排列的可以有索引。
示例1:
示例2:
运行结果:
示例3:遍历Map
运行结果:
示例3:
运行结果:
示例4:
6、泛型
List<E>规定了储存元素的对象类型。List储存的每个元素都是对象。
Map<K,V>规定了储存的元素的键和值的类型,Map储存的每个元素都有一个键值对。
示例1:规避无效输入
222是类型不匹配的无效输入。
Product.java
package com.aaa.collection; /** * 商品类 * @author 张晨光 * */ public class Product { private int id; private String name; private double price; private long stock; public Product() { } public Product(int id, String name, double price, long stock) { super(); this.id = id; this.name = name; this.price = price; this.stock = stock; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public long getStock() { return stock; } public void setStock(long stock) { this.stock = stock; } }
ProductDemo.java
package com.aaa.collection; import java.util.ArrayList; import java.util.List; public class ProductDemo { public static void main(String[] args) { //使用List,来存放数据,存放商品的数据; //不用泛型:1.是无效数据的录入;2.取值 赋值的不方便; List<Product> pList=new ArrayList<Product>(); //List pList=new ArrayList ();//ArrayList里面的数据是Object类型的数据 pList.add(new Product(1,"可乐",2.8,900)); pList.add(new Product(2,"啤酒",3,1000)); pList.add(new Product(3,"足球",78,450)); pList.add(new Product(4,"球衣",33,200)); //向list里面加入了4条商品数据的; //foreach for(Product p:pList){//p:代表每次取出来的商品 System.out.print("\t商品编号"+p.getId()); System.out.print("\t商品名称"+p.getName()); System.out.print("\t商品价格"+p.getPrice()); System.out.println("\t商品库存"+p.getStock()); } } }
运行结果:
示例:上述示例如果不适用泛型,将会比较1、容易出现无效输入;2、取值困难,代码修改如下:
上面使用泛型代码的截图如下:
经过比较,可见泛型的获取值比较简单。
7、HashMap包含ArrayList
/* *需求: *假设HashMap集合的元素是ArrayList。有3个。 *每一个ArrayList集合的值是字符串。 *元素我已经完成,请遍历。 *结果: * 三国演义 * 吕布 * 周瑜 * 笑傲江湖 * 令狐冲 * 林平之 * 神雕侠侣 * 郭靖 * 杨过 */ package cn.itcast_02; import java.util.ArrayList; import java.util.HashMap; import java.util.Set; public class HashMapIncludeArrayListDemo { public static void main(String[] args) { // 创建集合对象 HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>(); // 创建元素集合1 ArrayList<String> array1 = new ArrayList<String>(); array1.add("吕布"); array1.add("周瑜"); hm.put("三国演义", array1); // 创建元素集合2 ArrayList<String> array2 = new ArrayList<String>(); array2.add("令狐冲"); array2.add("林平之"); hm.put("笑傲江湖", array2); // 创建元素集合3 ArrayList<String> array3 = new ArrayList<String>(); array3.add("郭靖"); array3.add("杨过"); hm.put("神雕侠侣", array3); // 遍历集合 Set<String> set = hm.keySet(); for (String key : set) { System.out.println(key); ArrayList<String> value = hm.get(key); for (String s : value) { System.out.println("\t" + s); } } } }