集合-map&&泛型

集合框架

是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。

Collection 接口

Collection对象是将多个元素组成一个单元的对象

集合用于存储、检索和操纵数据

集合框架是用于表示和操纵集合的统一体系结构

集合框架的优点

提供有用的数据结构和算法,从而减少编程工作

提高了程序速度和质量,因为它提供了高性能的数据结构和算法

允许不同 API 之间的互操作,API之间可以来回传递集合

可以方便地扩展或改写集合

常用集合接口

List接口

特点: 有序的集合;允许重复
常见实现类:ArrayListLinkedList,Vector

 

Set接口

特点: 不允许重复
常见实现类:HashSetTreeSet

 

Map接口

特点: 用于存储键/值映射关系
常见实现类:HashMapHashtableProperties

泛型

泛型提供了一个可以对集合使用类型参数来指定元素的类型

 如:

ArrayList<String> list = new ArrayList<String>();

 

注意:

1、泛型的类型参数只能是引用类型,不能是基本数据类型。

 

2、泛型的类型参数可以有多个。

 

3、泛型的参数类型可以使用extendssuper语句

 

4、泛型的参数类型还可以是通配符(?)类型。

 

泛型的使用

public class Couple<T> {
	private T first;
	private T second;
	public Couple(T first, T second) {
		super();
		this.first = first;
		this.second = second;
	}
	public T getFirst() {
		return first;
	}
	public void setFirst(T first) {
		this.first = first;
	}
	public T getSecond() {
		return second;
	}
	public void setSecond(T second) {
		this.second = second;
	}
	
	
}

public class CoupleTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Couple<String> cp1 = new Couple<String>("first", "second");
		String first = cp1.getFirst();
		Couple<Integer> cp2 = new Couple<Integer>(1, 2);
		int second = cp2.getSecond();
		//返回类型为Integer,有自动拆箱过程
	
	}

}

Map遍历

@Test
	public void test7(){
		Map<String,Integer> map=new HashMap<String,Integer>();
		map.put("jessica",100);
		map.put("tom",200);
		map.put("den",300);
		//第一种:普遍使用,二次取值
		System.out.println("通过Map.keySet遍历key和value:");
		for (String key : map.keySet()) {
			System.out.println("key= "+ key + " and value= " + map.get(key));
		}
		//第二种:通过Map.entrySet使用iterator遍历key和value:
		Iterator<Entry<String, Integer>> it = map.entrySet().iterator();
		while (it.hasNext()) {
			Entry<String, Integer> entry = it.next();
			System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
		}
		//第三种:推荐,尤其是容量大时
		System.out.println("通过Map.entrySet遍历key和value");
		for (Entry<String, Integer> entry : map.entrySet()) {
			System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
		}
		//第四种:通过Map.values()遍历所有的value,但不能遍历key"
		for (Integer v : map.values()) {
		System.out.println("value= " + v);
		}
	}

演示创建map集合,给集合添加元素,根据key获取元素的值

@Test
	public void test(){
		Map<Long,Student> ms = new HashMap<Long, Student>();
		Student s =null;
		s = new Student("zs");
		Long id = s.getId();
		ms.put(id, s);//给map添加元素
		s = new Student("zs");
		id = s.getId();
		ms.put(id, s);//给map添加元素
		s = new Student("zs");
		id = s.getId();
		ms.put(id, s);//给map添加元素
		
		System.out.println(ms);
		//根据key获取元素的值
		Student stu = ms.get(1L);
		System.out.println(stu);
	}

set集合中添加数据时,如果数据已经存在,数据添加不进去,但在map中,如果键已经存在,会把原来对应的键的值覆盖

@Test
	public void test4(){
		Set<Long> ls = new HashSet<Long>();
		System.out.println(ls.add(1L));//true
		System.out.println(ls.add(1L));//false,元素已经存在
		
		Map<Long,Student> ms = new HashMap<Long, Student>();
		ms.put(1L, new Student("张三"));
		ms.put(2L, new Student("李四"));
		System.out.println(ms);
		ms.put(2L, new Student("王五"));//key2L已经存在,这个元素会怎么处理?覆盖
		System.out.println(ms);		
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值