JavaSE 12:集合

集合

ArrayList

List继承了Collection接口,有三个实现的类

ArrayList

​ 数组列表,数据采用数组方式存储。 类似于动态数组适合查找元素

LinkedList

​ 链表,具有链表性质 适合删除元素

Vector

​ 数组列表,添加同步锁,线程安全的

package Day2;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class Demo {
        public static void main(String[] args) {
            Collection<Object> c0 = new ArrayList<>();
            c0.add("a");
            c0.add("b");
            c0.add("c");
            c0.add("d");
            Collection<Object> c1 = new ArrayList();
            c1.add("a");
            c1.add("b");
            c1.add("c");
            System.out.println(c0.retainAll(c1));//交集 集合元素不一致变为true
            System.out.println(c0);
            Collection c3 = new ArrayList();
            c3.add(8);
            c3.add(5);
            c3.add(6);
            Object obj[] = c3.toArray();
            System.out.println(Arrays.toString(obj));
            test(1, 2, 3, 4, 5, 6);
            tr(8,10,8,9,8,5);
            Integer []a={1,2,3,4,5,6};
            List<Integer> list= Arrays.asList(a);

        }
        public static void test(int...a){
                System.out.println(a);
            }
    public static void tr(int b,int...a){
        System.out.println(a);
    }
    }

集合的遍历和删除

import java.util.ArrayList;
import java.util.*;
public class Day3 {
    public static void main(String[] args) {
        ArrayList list=new ArrayList();
        list.add("a");
        list.add("d");
        list.add("b");
        list.add("d");
        list.add("c");
        list.add("d");
        //迭代器的遍历
        list.forEach(e-> System.out.print(e+" "));//jdk8以后的forEach语句
        System.out.println();
        Iterator it=list.iterator();
        it.forEachRemaining(e-> System.out.print(e+" "));//jdk8以后的forEach语句
        System.out.println();
        while(it.hasNext()){
            Object obj=it.next();
            System.out.print(obj+" ");
        }
        System.out.println();

      for(Object obj:list){
          //不建议删除元素
          System.out.print(obj+" ");
      }
        System.out.println();
        for(Object obj:list){
            //不建议删除元素
            if(obj.equals("a")) {
                list.remove(obj);
                break;//只能删除一个元素不能删除全部的元素所以建议使用迭代器的方法删除
            }
        }
        System.out.println(list);
    Iterator itt=list.iterator();
    while(itt.hasNext()){
        Object obj=itt.next();
        if(obj.equals("d"))
       itt.remove();//使用该方法删除
    }
        System.out.println(list);
    }
}

泛型

package Dya3;
//泛型:泛指一种类型,类型不确定,可以以参数的形式传递。
//类型必须是引用类型
//数组可以存储基本数据类型,引用数据类型如String
//集合只能存储引用数据类型,list.add(8)存在自动装箱。
public class Demo <T>{
    public T test(T t){
        return null;
    }
    public static void main(String[] args) {
        Demo<Integer> demo=new Demo<>();
        demo.test(8);
    }
}

HashSet

Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的。

HashSet类中的元素不能重复,即彼此调用equals方法比较,都返回false。

底层数据结构是哈希表+链表。

哈希表依赖于哈希值存储。

package Dya3;

import java.util.Objects;

public class Student {
    private String name;
    private String id;

    public Student(String id, String name) {
        this.name = name;
        this.id=id;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id='" + id + '\'' +
                '}';
    }

//重写hashCode()和equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(name, student.name) &&
                Objects.equals(id, student.id);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, id);
    }
}
package Dya3;
import java.util.HashSet;
public class hashDemo {
    public static void main(String[] args) {
        HashSet<Student> set = new HashSet<>();
        Student s1 = new Student("100", "jim0");
        Student s2 = new Student("100", "jim0");
        Student s3 = new Student("102", "jim2");
        Student s4 = new Student("103", "jim3");
        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        System.out.println(set);
        HashSet st = new HashSet<>();
        st.add(123);
        st.add(123);
        st.add("jjk");
        st.add("jjk");
        System.out.println(st);
       //遍历
        set.forEach(e-> System.out.println(e));
        Iterator it= set.iterator();
        it.forEachRemaining(e->System.out.println(e));
    }
}

TreeSet<Integer> set=new TreeSet<>();
set.add(8);
set.add(7);
set.add(9);
set.add(8);
System.out.println(set);
TreeSet<String> str=new TreeSet<>();
str.add("abc");
str.add("def");
str.add("abc");
str.add("ghi");
System.out.println(str);
package Dya3;
import java.util.Objects;
public class Student implements  Comparable<Student>{
    private int id;
    private String name;
    public Student(int id,String name) {
        this.name = name;
        this.id=id;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id='" + id + '\'' +
                '}';
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id &&
                Objects.equals(name, student.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }
    @Override
    public int compareTo(Student o) {
        return this.id-o.id;
    }
}
package Dya3;

import sun.reflect.generics.tree.Tree;

import java.util.TreeSet;

public class TreesetDemo {
    public static void main(String[] args) {
        TreeSet<Student> st=new TreeSet<>();
        Student s1=new Student(101,"gll");
        Student s2=new Student(102,"lyh");
        Student s3=new Student(101,"gll");
        Student s4=new Student(103,"xjx");
        st.add(s1);
        st.add(s2);
        st.add(s3);
        st.add(s4);
        System.out.println(st);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值