Java 集合类的总结

如不了解集合与数组的区别可以点击链接查看Java集合与数组的区别

集合体系图

 首先通过查看集合类的关系图来讲解常用的集合类

1.Collection类 :

Collection类:单列集合的根接口,提供了一些操作集合的基本方法,有两个重要的子接口List和Set。

  • List类: 继承了Collection接口,是单列集合的一个重要分支,其中集合中的元素有序,可出现重复元素。

  1. ArrayList和LinkedList都是List的子类在用法上没有区别,但是在功能上还是有区别的。LinkedList集合采用双链表结构来存储数据,所以经常用在增删操作较多而查询操作很少的情况下,ArrayList则相反。
类名 底层数据结构 线程是否安全 效率
Vector 动态的数组结构 线程安全 无论增删还是查询都非常慢(现在基本不用)
ArrayList 动态的数组结构 线程不安全 增删的效率很慢(因为要移动数据),但是随机查询的效率很高。
LinkedList 链表数据结构 线程不安全 对元素的增删的操作效率很高,随机查询的效率低(因为要移动指针寻址)
  • Set类:Set里存放的对象是无序,不能重复的,没下标 插入的顺序跟遍历的顺序是不一样的。
    1. HashSet集合(掌握):A:底层数据结构是哈希表(是一个元素为链表的数组)
                                        B:哈希表底层依赖两个方法:hashCode()和equals()
                                           执行顺序:
                                               首先比较哈希值是否相同
                                                       相同:继续执行equals()方法
                                                                  返回true:元素重复了,不添加
                                                                  返回false:直接把元素添加到集合
                                                      不同:就直接把元素添加到集合
                                      C:如何保证元素唯一性的呢?
                                        由hashCode()和equals()保证的
                                      D:开发的时候,代码非常的简单,自动生成即可。
                                      E:HashSet存储字符串并遍历
                                      F:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素)
    2. TreeSet集合
              A:底层数据结构是红黑树(是一个自平衡的二叉树)
              B:保证元素的排序方式
                  a:自然排序(元素具备比较性)
                      让元素所属的类实现Comparable接口
                  b:比较器排序(集合具备比较性)
                      让集合构造方法接收Comparator的实现类对象
              C:把我们讲过的代码看一遍即可
    3. 案例:
              A:l编写一个程序,获取10120的随机数,要求随机数不能重复。
              B:l键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台

A

package com.miaoxiake.day03.collection;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class HashSetDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Set numbers=new HashSet<>();
		Random random=new Random();
		//获取10个无重复的随机数
		while (numbers.size()<10) {
			numbers.add(random.nextInt(20)+1);
		}
		//输出集合
		System.out.println(numbers.toString());
	}

}

B

public class Student {
	private String name;
	private double chineseScore;
	private double mathScore;
	private double englishScore;
}

首先创建Student类将(姓名,语文分数,数学分数,英语分数)属性封装,然后创建get和set,toString等方法,其中如果要计算计较总分还要实现Comparable接口重写compareTo方法

@Override
	public int compareTo(Object o) {//返回一个负整数,零或正整数,因为该对象小于,等于或大于指定对象。 
		Student student=(Student) o;
		double sumObj=student.chineseScore+student.mathScore+student.englishScore;//计算添加对象的总分数
		double sumThis=this.chineseScore+this.mathScore+this.englishScore;//计算本对象的总分数
		if(sumObj-sumThis>0) {//如果比此对象大就往右移
			return 1;
		}else if (sumObj-sumThis==0&&student.getName().equals(this.getName())) {//成绩相同时判断是否姓名相同
			return 0;
		}
		return -1;
	}

最后编写测试类如图

测试类

测试结果

测试结果

 B测试题下载地址 集合练习题B

2. Map类:

    (1)将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
    (2)Map和Collection的区别?
        A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
        B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。

     (4)Map集合的遍历

        A:键找值
            a:获取所有键的集合
            b:遍历键的集合,得到每一个键
            c:根据键到集合中去找值
        
        B:键值对对象找键和值
            a:获取所有的键值对对象的集合
            b:遍历键值对对象的集合,获取每一个键值对对象
            c:根据键值对对象

目录

1.Collection类 :

2. Map类:


猜你喜欢

转载自blog.csdn.net/qq_38217237/article/details/81205546