JavaSE基础 集合快速上手

107 阅读4分钟

本文已参与[新人创作礼]活动, 一起开启掘金创作之路。

前言

学一个东西,我们首先得知道她具体可以用来干嘛

那么 集合是什么,可以用来做什么?

集合的基本概念

集合类主要负责保存、盛放其他数据,因此,集合类也被称之为容器类

Java所有的集合类都位于java.util 包下。

作用

我们知道,Java处处皆对象,所以通常Java程序可以在任何时候、任意位置创建任意数量的对象,

当这些对象的数量多了起来的时候,我们又该如何组织处理她们呢?

因此,Java为我们提供了集合类,可以保存并管理这些数量不确定的对象数据。

集合在Java编程中使用非常广泛,她就像一个万能的容器,可以盛装万物,而且条件允许的话,这个容器似乎还可以无限大。

最经典的使用场景就是 JavaBean结合集合的使用。

与数组的区别

我们前面讲到,集合是用来存放数据的,那你可能一下子就想到了

诶,我们的数组不是也可以用来存放数据

虽然都可以存放数据,但是他们还真就不大一样:

  • 数组的长度是固定的,而集合的长度是可变的
  • 数组只能存储同一类型的数据,而集合可以存储不同类型的数据
  • 集合还可以使用泛型来约束存入的数据
  • 当然,集合不可以存入基本类型的数据

集合上手

集合的分类

直接上一张图,一目了然

image.png

ArrayList 有序链表类

介绍:

ArrayList是Java中的有序链表类,实现了动态数组,即长度可变。

她允许所有元素,包括null。

每个ArrayList实例的容量可随着不断添加新元素而自动增加。

直接上代码演示:

package stu332;

import java.util.*;

public class DemoArrayList {
    public static void main (String[] args){
    	ArrayList<String> list = new ArrayList<String>();
    	
    	// 追加元素或增加元素到list对象指定的位置中
    	list.add("冰镇生鲜");
    	list.add("侘寂");
    	list.add("冰可乐");
    	list.add("热咖啡");
    	list.add("西湖龙井");
    	
    	// 显示数组链表中的内容
    	System.out.println("此ArrayList中的内容为:"+list);
    	
    	// 检查元素的位置
        int position = list.indexOf("热咖啡");
        System.out.println("热咖啡的索引位置为:"+position);
        
        // 检查数组链表是否为空
        boolean check = list.isEmpty();
        System.out.println("判断此ArrayList是否为空:"+check);
        
        // 获取链表的大小
        int size = list.size();
        System.out.println("此ArrayList的长度为:"+size);
        
        // 检查数组链表中是否包含某元素
        boolean element = list.contains("冰可乐");
        System.out.println("此ArrayList包含冰可乐的结果为:"+element);
        
        // 获取数组链表指定位置上的元素
        String item = list.get(0);
        System.out.println("0位置的元素是:"+item);
        
        // 遍历 使用for each循环
        System.out.println("用foreach循环遍历集合");
        
        for (String str : list) {
        	System.out.println("元素是:"+str);
        }
        
        // 替换元素
        list.set(1, "幽玄");
        System.out.println("替换元素后的ArrayList内容为:"+list);
        
        // 移除第0个位置上的元素
        list.remove(0);
        
        // 移除第一次找到的西湖龙井
        list.remove("西湖龙井");
        
        // 转换ArrayList为数组元素
        String[] simpleArray = list.toArray(new String[list.size()]);
        System.out.println("该集合列表转成素组元素后:"+Arrays.toString(simpleArray));
        
    }
}

运行结果:

image.png

HashSet 哈希集合

介绍:

HashSet是一个无序、没有重复元素且允许null元素但最多只能有一个null元素的集合。

由于HashSet是无序的,所以每组数据都没用索引,凡是需要通过索引来进行操作的方法HashSet都没有

也不能使用普通for循环来进行遍历,只有foreach和迭代器两种遍历方法

直接上代码演示:

package stu332;

import java.util.*;

public class DemoHashSet {
	public static void main (String[] args){
		HashSet<String> setString = new HashSet<String>();
		setString.add("星期一");
		setString.add("星期二");
		setString.add("星期三");
		setString.add("星期四");
		setString.add("星期五");
		setString.add("星期六");
		setString.add("星期日");
		
		// 使用for each循环
		for (String item:setString) {
			System.out.println(item);
		}
	}
}

运行结果:

image.png

HashMap 哈希映射

介绍:

HashMap是一个用于存储Key-Value的键值对的集合,她允许用一个key去存储数据。

当想获得数据的时候,是通过key去得到数据,所以通常把HashMap的取值比喻成查字典的操作。

直接上代码演示:

package stu332;
import java.util.*;
public class DemoHashMap {
		public static void main (String[] args){
			HashMap<String,String> hm = new HashMap<String,String>();
			hm.put("星期一","吃饭");
			hm.put("星期二","睡觉");
			hm.put("星期三","打豆豆");
			hm.put("星期四","逛街");
			hm.put("星期五","喝奶茶");
			hm.put("星期六","看电影");
			hm.put("星期日","唱跳rap篮球");
			
			
			System.out.println("-------------foreach----------------");
			// 使用for-each循环遍历,对于hash-map并不推荐
			for (String item:hm.keySet()) {
				System.out.println(item);
			}
			
			
			System.out.println("-------------迭代器----------------");
			
			// 使用迭代器遍历hash-map是效率最高的
			Iterator<Map.Entry<String, String>> iterator = hm.entrySet().iterator();

			while (iterator.hasNext()){

			Map.Entry<String, String> next = iterator.next();

			System.out.println("key="+next.getKey()+"value="+next.getValue());
			
			}
//			因为hashMap内部的存储结构就是基于Entry的数组,在用这种方式进行遍历时,只需要遍历一次即可。
//			而使用其他方式的时间复杂度可以会提高,
//			例如:keySet方式,每次都需要通过key值去计算对应的hash,然后再通过hash获取对应的结果值,因此效率较低。
			
		}
}

运行结果:

image.png