java 集合接口、实现类、泛型

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);
			}
		}
	}
}