Java集合第一节

发布时间:2024年01月20日

集合1

目录:

  • 集合的概念

  • Collection接口

  • Iterator接口

  • Set

集合的概念

  • 集合:将若干用途 性质相同或相近的数据组合而成的一个整体

  • java集合中只能保存引用类型的数据 不能保存基本类型的数据

Collection接口

package com.haina365.day01.day14;


import java.util.ArrayList;
import java.util.Collection;

/*
两大家族 三个集合 四个重要接口 六个重要实现类
两大家族是Collection Map

三个集合  List Set  Map

Set集合:无序 不可以重复

List集合:有序 可以重复

Map集合:以键值对的形式保存数据 键不可以重复 值可以重复

四个重要接口Collection Set List Map

六个重要实现类
Set:HashSet TreeSet
List:ArrayList LinkedList
Map:HashMap TreeMap

我们只讲HashSet ArrayList LinkedList HashMap四个实现类
 */
public class CollectionTest {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        //获取集合的长度 也就是集合中元素的个数
        System.out.println(c.size());
        //判断集合是否为空 如果是则返回true 否则返回false
        System.out.println(c.isEmpty());
        //add 往集合中添加数据的方法
        c.add("zhangsan");
        c.add(18);
        c.add(80.5);
        c.add(true);
        c.add('A');
        //因为集合也重写了Object的toString方法 所以显示的是保存到集合中的数据内容
        System.out.println(c);
        System.out.println(c.size());
        //删除集合中的元素 如果有则删除 且集合长度改变 如果没有 则不会删除数据 也不会报错 长度不变
        c.remove(true);
        System.out.println(c);
        System.out.println(c.size());
        c.remove(false);
        System.out.println(c);
        System.out.println(c.size());
        //将集合转换为数据 算是集合的一种遍历形式
        Object[] o = c.toArray();
        for (Object i:o){
            System.out.print(i + " ");
        }
        //清空集合 删除集合中所有的数据
        c.clear();
        System.out.println(c);
    }
}

Iterator接口

package com.haina365.day01.day14;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class IteratorTest {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("zhangsan");
        c.add(true);
        c.add(123);
        c.add(559.7);
        c.add('C');
        //集合的遍历方式 迭代器
        Iterator it = c.iterator();
        //在数据前面有一个游标 如果后面有数据则返回true 如果没有数据则返回false
        while (it.hasNext()){
            //it.next方法用于获取后面的数据
            Object o = it.next();
            System.out.println(o);
        }
    }
}

Set集合

package com.haina365.day01.day14;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/*
Set集合的无序不可以重复 不仅仅是同一个对象不能保存进同一个集合中 不同对象内容相同也不能保存进同一个集合中


说到比较一定会想到==和equals  为了提高比较效率 我们会优先比较hash值 hash值是内容经过了一系列hash计算的得到的一个int
类型的整数值 如果两个对象的hash值不同 则证明这是两个对象 但是当两个对象的hash值相同  则需要进行其他比较 防止出现
hash值相同 但是内容不同的偶然事件发生


当两个对象的hash值相同 则会进行内容的逐一比较 如果形同则不保存 否则保存进set集合

所以set集合的不可以重复 要先看hash值 然后在比较equals 所以需要两者的共同判断
 */
public class SetTest {
    public static void main(String[] args) {
        Set set = new HashSet();
        Set s = new Set() {
            @Override
            public int size() {
                return 0;
            }

            @Override
            public boolean isEmpty() {
                return false;
            }

            @Override
            public boolean contains(Object o) {
                return false;
            }

            @Override
            public Iterator iterator() {
                return null;
            }

            @Override
            public Object[] toArray() {
                return new Object[0];
            }

            @Override
            public Object[] toArray(Object[] a) {
                return new Object[0];
            }

            @Override
            public boolean add(Object o) {
                return false;
            }

            @Override
            public boolean remove(Object o) {
                return false;
            }

            @Override
            public boolean containsAll(Collection c) {
                return false;
            }

            @Override
            public boolean addAll(Collection c) {
                return false;
            }

            @Override
            public boolean retainAll(Collection c) {
                return false;
            }

            @Override
            public boolean removeAll(Collection c) {
                return false;
            }

            @Override
            public void clear() {

            }
        };
        //无序:指保存在set集合的顺序和显示的顺序不一样 这就是无序
        set.add("hello");
        set.add("lisi");
        set.add("wangwu");
        set.add("zhaoliu");
        set.add("zhangsan");
        s.add("hello");
        //set集合调用add方法的实现原理是通过比较hash值 地址 内容来判断是否应该添加进去
        String s1 = "hello world";
        String s2 = new String("hello world");
        //不可重复:指的是同一个对象不能保存在同一个set集合中
        //同时 不同对象 内容相同的也不能保存在set集合中
        set.add(s1);
        set.add(s2);
        System.out.println(set);
    }
}

如果想用set集合添加自定义对象 应该如何添加?

package com.haina365.day01.day14;

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        Set set = new HashSet();
        Student s1 = new Student(18,55,'A');
        Student s2 = new Student(18,55,'A');
        Student s3 = new Student(20,99,'A');
        set.add(s1);
        set.add(s2);
        set.add(s3);
        System.out.println(set);
    }
}
class Student{
    int age;
    double score;
    char name;
    public Student(int age,double score,char name){
        this.age = age;
        this.name = name;
        this.score = score;
    }
    //为了让set集合正常工作 需要重写equals方法和hashcode方法

    @Override
    public boolean equals(Object o) {
        if (this == o){
            return true;
        }
        if (o instanceof Student){
            Student s = (Student) o;
            if (this.age == s.age && this.score == s.score && this.name == s.name){
                return true;
            }
            return false;
        }
        return false;
    }

    @Override
    public int hashCode() {
        //自定义一个hash值
        return (int) (age * 12 + score * 234 + name * 3);
    }
}
文章来源:https://blog.csdn.net/Arguan_/article/details/135672376
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。