java学习笔记20-集合框架

1.什么是集合框架

集合类是用于保存一些列数据或对象的结构,每种集合类型都有自己的算法,给各种数据或对象提供插入,删除,查询和排序等功能。

简单来说,它除了替代数组完成多个对象的存储功能,也提供了额外的算法。

java集合框架是这些框架集类库,及实现相关操作的类库的总称

 

2.java集合框架包含哪些内容

java集合框架大致分为两个概念:Collection和Map

Collention是一种接口,用于存储系列对象;该接口下分别有List、Set等接口。List接口会按照插入的顺序保存元素;Set接口是无序的,并且不会有重复的元素。

Map:一种用来存储一系列“键值对”的对象(可以理解为python的字典)

 

3.List  Set Map等常用库的用法

3.1 List接口

List接口会按照插入的顺序保存元素,这个接口下最常用的实现类是ArrayList

public class MyArrayList {
    public static void main(String[] args){
        ArrayList list = new ArrayList();
        list.add("123");    //添加元素
        Object obj = list.get(0);   //通过下标获取元素
        System.out.println("List长度:"+list.size());//获取List长度
        System.out.println(obj);
    }
}

如果用上面的方式创建List,在读取的时候,只能用Object类型去接收。

 

可以使用泛型来限制List存储的类型

        ArrayList<Integer> list1 = new ArrayList<Integer>();
        list1.add(1);
        int x = list1.get(0);

<>里面可以传基本数据类型的包装类

上面代码中的数组就只能接收Integer或int的数据

 

其他常用pai

        //其他常用api
        ArrayList<Integer> list2 = new ArrayList<Integer>();
        System.out.println("list2是否为空集合:"+list2.isEmpty());    //判断是否为空集合
        list2.addAll(list1);    //将另外一个集合的元素全部添加进来
        System.out.println("list2是否为空集合:"+list2.isEmpty());
        System.out.println("是否有某个元素:"+list2.contains(1));;  //判断集合中是否有某个元素
        System.out.println("是否有某个元素:"+list2.contains(2));  //判断集合中是否有某个元素
        System.out.println("查询元素下标:"+list2.indexOf(1));    //查询某个元素的下标
        list2.clear();  //清空集合中的元素
        System.out.println("list2是否为空集合:"+list2.isEmpty());

 

3.2 Set接口

Set,无序,不会有重复数据,也支持泛型

最常用的Set是HashSet

	public static void main(String[] args){
		//可以使用多态,支持泛型
		Set<Integer> setl = new HashSet<Integer>();
		setl.add(5);
		setl.add(7);
		setl.add(9);
		setl.add(1);
		setl.add(9);
		System.out.println("setl长度:"+setl.size());
		for (int i:setl){
			System.out.println(i);
		}

	}

可以看到setl的长度是4,并没有重复添加。打印出来的顺序也不是添加的顺序。

 

3.3 Map接口

Map是一个键值对的结构,可以通过键来查找值

常用的有HashMap

	public static void main(String[] args){
		Map<String, String> map = new HashMap<String,String>();
		map.put("北京", "beijing");
		map.put("上海", "shanghai");
		map.put("上海", "guangzou");
		System.out.println(map.get("上海"));
		System.out.println(map.size());
		System.out.println("===========================");
    }

添加相同的键,会被覆盖

 

Map循环方式

通过Map.keySet()遍历key和value

		//通过Map.keySet()遍历key和value
		System.out.println("通过Map.keySet()遍历key和value");
		System.out.println(map.keySet());	//返回集合的所有key
		for (String key:map.keySet()){
			System.out.printf("key为%s时,value为%s。\n", key, map.get(key));
		}

Map.keySet()返回了map的所有key

使用Map.get()方法,通过key,获取对应的value

 

通过Map.entrySet遍历key和value

推荐使用该方式

		//通过Map.entrySet遍历key和value
		System.out.println("===========================");
		System.out.println("通过Map.entrySet遍历key和value");
		System.out.println(map.entrySet());
		for (Map.Entry<String, String> ent:map.entrySet()){
			System.out.printf("key为%s时,value为%s。\n", ent.getKey(), ent.getValue());
		}

Entry是Map下的子类,专门用来表示Map结构的键值对

map.entrySet()返回的是key=value结构的数据,通过Entry下的getKey()和getValue()获取key和value

推荐使用该方法

 

通过Map.values()遍历所有的value

		//通过Map.values()遍历所有的value,但是不能遍历key
		System.out.println("===========================");
		System.out.println("通过Map.values()遍历所有的value");
		for (String value: map.values()){
			System.out.println(value);
		}

通过Map.values()方法,可以获得map所有的value

该方式只有value,没有办法获取对应的key

 

 

迭代器

集合框架提供了统一迭代的功能,可以在List,Set,Map中使用

在迭代之前,必须让容器对象返回一个迭代器对象,通过迭代器对象的hasNext()方法判断是否有下一条数据,有则通过next()方法获取这条数据

迭代器类Iterator

Iterator 迭代器名 = 集合对象.iterator()

 

List使用迭代器

        ArrayList<String> list4 = new ArrayList();
        list4.add("1");
        list4.add("2");
        list4.add("3");
        //创建迭代器对象
        Iterator<String> ite = list4.iterator();
        //使用for循环
        for (String i ;ite.hasNext();){
            i = ite.next();
            System.out.println(i);
        }
        //使用while循环
        while(ite.hasNext()){
            String i = ite.next();
            System.out.println(i);
        }

迭代器遍历时,是一条一条往下的。当遍历结束后,就停在最后一条了

上面代码由于for循环和while循环都是使用一个迭代器对象,在for循环的时候,就已经把所有对象给遍历完了。再用while循环的时候。没有内容可以遍历了

 

Map使用迭代器

		//对Map.entrySet()方法创建迭代器
		Iterator<Map.Entry<String, String>> it1  = map.entrySet().iterator();
		//for循环
		for (Map.Entry<String,String> a ;it1.hasNext();){
			a = it1.next();
			System.out.println(a);
			System.out.println(a.getKey());
			System.out.println(a.getValue());
		}
		//while循环
		while (it1.hasNext()){
			Map.Entry<String, String> a = it1.next();
			System.out.println(a.getValue());
			System.out.println(a.getKey());
		}

		//对Map.keySet()方法创建迭代器
		Iterator<String> it2 = map.keySet().iterator();
		//使用for循环
		for (String i;it2.hasNext();){
			i = it2.next();
			System.out.println(i);
		}
		//使用while循环
		while (it2.hasNext()){
			String i = it2.next();
			System.out.println(i+map.get(i));
		}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值