Java学习笔记8-集合

一、简介

      集合是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。其中,构成集合的这些对象则称为该集合的元素。即:一个或多个确定元素所构成的整体。

二、作用

存储对象的容器,将容器添加标签,使其只能存储某种对象类型。

三、特点

  • 只能用来存放对象;
  • 存放的是对对象的引用;
  • 可以存放不同类型,不限数量的数据类型;

四、集合和数组区别

长度区别:

  • 数组固定
  • 集合可变

内容区别:

  • 数组可以是基本数据类型,也可是引用数据类型
  • 集合是引用数据类型

元素内容:

  • 数组只能存储同一种类型
  • 集合可以存储不同类型

五、分类(依据实现的接口)

在这里插入图片描述
小结:

  • Set:无序、不可重复集合;
  • List:有序、可重复集合;
  • Map:键值对映射,键唯一,值不唯一;

六、类型详解

set

1、简介
      set元素保证元素唯一性依赖equal()和hashCode()两个方法,在创建的元素中没有重写这两个方法时,没人调用的是Object类中的这两个方法,而object() 方法默认比较的是地址值是否相等。
2、特点
特点:无序、不可重复集合;
3、分类
HashSet 、TreeSet 、 LeakedHashSet
4、类型

HashSet
(1)特点:

  • 调用hashCode()查看有相同的哈希值,
  • 调用equals()与放入新元素比较,去重(底层哈希算法实现,效率高)

(2)用法

  • 创建集合对象(List是接口,通过创建子类对象完成接口的实例化),Set set=new HashSet()
  • 创建元素对象
  • 向集合中添加元素,add()
  • 循环遍历集合并输出

(3)遍历

  • 普通for循环
  • 增强for循环
  • 迭代器
public class Hast {
    
    
	public static void main(String[] args) {
    
    
//		Set set=new HashSet();//另一种调用集合方法
//		set.add("as");
//		set.add(12);
//		System.out.println(set);
		Set<Object> set1=new HashSet<Object>();//object为所有类的父类,就是说set里面可以添加任何类型元素
		set1.add(12);
		set1.add(21);
		set1.add("ss");//添加元素
		System.out.println(set1);
		set1.remove(12);//移除元素,显示剩余元素
		System.out.println(set1);
		System.out.println(set1.contains(12));//判断集合是否包含该元素
		set1.add(true);
		int ss=set1.size();//显示集合中有多少元素
		System.out.println(ss);
		Iterator sl=set1.iterator();//使用迭代器遍历集合
		while (sl.hasNext()) {
    
    
			System.out.println(sl.next());	
		}
		//for each迭代数据
		for (Object obj : set1) {
    
    //把set的每一个数据取出来赋值给obj,直到循环结束
		System.out.println(obj);
		}
		
		
		Set<String> set2=new HashSet<String>();//指定集合中只能放string数据类型
		set2.add("s1");
		set2.clear();//清空集合
		set2.add("s2");
		System.out.println(set2);
		
	}

}

TreeSet
特点:元素自动升序排列(底层二叉树实现)

public class Tset {
    
    
	public static void main(String[] args) {
    
    
		Set<Object> ss=new TreeSet<Object>();
		ss.add("a");
		ss.add("c");
		ss.add("a");
		ss.add("s");
		ss.add("o");
		System.out.println(ss);//按照自然排序
		
		
		Set<Integer> ss1=new  TreeSet<Integer>();
		ss1.add(2);
		ss1.add(1);
		ss1.add(4);
		ss1.add(3);
		for (Integer i:ss1) {
    
    
			System.out.println(i);
		}
	}
}

List

1、特征
特征:有序、可重复的集合
2、分类
ArrayList、LinkedList、Vector
3、类型
ArrayList
(1)特点:底层动态数组,查询快,增删慢(同数组),线程不安全,效率高。

(2)用法

  • 创建集合对象(List是接口,通过创建子类对象完成接口的实例化),List list=new ArrayList()
  • 创建元素对象
  • 向集合中添加元素,add()
  • 循环遍历集合并输出;迭代器迭代时必须通过调用列表迭代器的方法来实现。
public class ALise {
    
    
	public static void main(String[] args) {
    
    
		List<String> list=new ArrayList<String>();//指定插入集合类型为string
		list.add("d");
		list.add("e");//list允许元素重复
		list.add("a");
		list.add("d");
		list.add("q");
		list.add("k");
		System.out.println(list);
		System.out.println(list.get(2));//通过索引下标来访问指定位置元素
		
		list.add(0,"e");//在指定索引下标位置插入数据
		System.out.println(list);
		System.out.println(list.indexOf("d"));//获取指定元素在集合中第一次出现的索引下标
		System.out.println(list.lastIndexOf("d"));//获取指定元素在集合中最后一次出现的索引下标
		list.set(1, "w");//根据指定的索引下标修改元素
		List<String> seList=list.subList(1, 4);取索引下标在大于等于2小于4的元素
		System.out.println(seList);
		System.out.println(list.size());
	}
}

LinkedList
特点:底层是链接,查询慢,增删快,线程不安全,效率高。
Vector
特点:查询快,增删慢,线程安全,效率低。

Map

1、作用:用于具有映射关系的数据

2、分类:HashMap、Hashtable、TreeMap

3、类型
HashMap
(1)特点:底层是哈希算发,针对键

(2)用法

  • 创建集合对象,Map<Interger,Object> map=new HashMap<>();
  • 创建元素对象
  • 向集合中添加元素,put()
  • 循环遍历集合并输出:1.获取所有元素的key:keySet();2.遍历keySet:iterator();3.通过key获取value:get()。

TreeMap
特点:底层是二叉树算法,针对键

public class Test6 {
    
    
	public static void main(String[] args) {
    
    
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("b", 1);//添加数据
		map.put("c", 2);
		map.put("e", 2);
		System.out.println(map);
		
		System.out.println(map.get("b"));//根据key取值
		
		map.remove("c");//根据key移除键值对
		System.out.println(map);
//		
		System.out.println(map.size());//map集合的长度
		
		System.out.println(map.containsKey("a"));//判断当前的map集合是否包含指定的key
		
		System.out.println(map.containsValue(10));//判断当前的map集合是否包含指定的value
		
//		map.clear();//清空集合
		
		Set<String> keys = map.keySet();//获取map集合的key的集合
		
		map.values();//获取集合的所有value值
		
		//遍历map集合,通过map.keySet();
		for(String key : keys){
    
    
			System.out.println("key: " + key + ", value: " + map.get(key));
		}
		
		//通过map.entrySet();遍历map集合
		Set<Entry<String, Integer>> entrys = map.entrySet();
		for(Entry<String, Integer> en : entrys){
    
    			System.out.println("key: " + en.getKey() + ", value: " + en.getValue());
		}
		
		//TreeMap的自然排序是字典排序
		Map<Integer,String> map1 = new TreeMap<Integer, String>();
		map1.put(4, "a");
		map1.put(2, "a");
		map1.put(3, "a");
		map1.put(1, "a");
		
		System.out.println(map1);
		
		Map<String,String> map2 = new TreeMap<String, String>();
		map2.put("b", "b");
		map2.put("c", "c");
		map2.put("d", "d");
		map2.put("a", "a");
		map2.put("ab", "ab");
		map2.put("1", "ab");
		map2.put("10", "ab");
		
		System.out.println(map2);
		
	}
}

七、工具类

1、作用
操作Set、List、Map,对其进行排序、查询、修改等操作;还提供了对集合对象设置不可变、对集合对象实现同步控制等方法;
2、常用成员方法

函数 作用
reverse(List) 反转集合中元素的顺序
shuffle(List) 对集合元素进行随机排序
sort(List) 升序排列
sort(List,Comparator) 根据指定的Comparator产生的顺序对集合进行排序
swap(List, int , int) 指定集合的i处元素与j处元素进行交换
Object max(Collection) 根据元素的自然顺序,返回给定集合中的最大元素
Object max(Collection,Comparator) 根据 Comparator 指定的顺序,返回给定集合中的最大元素
Object min(Collection) 返回给定集合中的最小元素
Object min(Collection,Comparator) 根据 Comparator 指定的顺序,返回给定集合中的最小元素
int frequency(Collection,Object) 返回指定集合中指定元素的出现次数
boolean replaceAll(List list,Object oldVal,Object newVal) 使用新值替换 List 对象的所有旧值
public class Test7 {
    
    
	public static void main(String[] args) {
    
    
		List<String> list = new ArrayList<String>();
		list.add("b");
		list.add("cd");
		list.add("ca");
		list.add("a");
		list.add("a");
		list.add("1");
		
		System.out.println(list);
		
		Collections.reverse(list);//反转 List 中元素的顺序
		System.out.println(list);
		
		Collections.shuffle(list);//对 List 集合元素进行随机排序
		System.out.println(list);
//		
		Collections.sort(list);//list集合字典升序排序
		System.out.println(list);
		
		System.out.println(Collections.frequency(list, "x"));//返回指定集合中指定元素的出现次数
		
		Collections.replaceAll(list, "b", "bb");//使用新值替换 List 对象的所有旧值
		
		System.out.println(list);
		
		Collections.swap(list, 0, 4);//将指定 list 集合中的 i 处元素和 j 处元素进行交换
		System.out.println(list);
		
		System.out.println(Collections.max(list));//list中最大值
		System.out.println(Collections.min(list));//list中最小值
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_45913017/article/details/112998890