编程语言
首页 > 编程语言> > Java学习_20220614

Java学习_20220614

作者:互联网

Java集合框架

一、泛型

1.泛型方法

在泛型方法中不用传递参数类型,类型是由调用的泛型方法的数据来传递。

/**
 *泛型方法,语法:<T>返回值类型
 */
public class GenericMethod {
    public <T> void show(T t){
        System.out.println("泛型方法:"+t);
    }
}
//调用泛型方法
GenericMethod genericMethod = new GenericMethod();
genericMethod.show("这是String类型的!");
genericMethod.show(1080);
genericMethod.show(3.1415);

2.泛型集合

        ArrayList arrayList = new ArrayList();
        arrayList.add("CCC");
        arrayList.add("XXX");
        arrayList.add(123);
        arrayList.add(456);
/*
        for(Object ob : arrayList){
            System.out.println(ob);
        }
*/
        for(Object ob : arrayList){
            String st = (String)ob; //强制类型转换时要看数据类型
            System.out.println(st);  //只能输出String类型的,int类型无法输出
        }

使用泛型集合

ArrayList<String> arrayList1 = new ArrayList();
arrayList1.add("www");
arrayList1.add("qqq");
//arrayList1.add(123);  出错,arrayList1数据类型为String
for(String string : arrayList1){
    System.out.println(string);
}

二、Set子接口

特点:无序、无下标、元素不可重复......继承Collections方法

Set实现类:

1、HashSet:基于HashCode实现元素不重复;当存入元素的哈希码相同时,会调用equals进行确认,结果为true,则拒绝后者存入。 

Set<String> set = new HashSet<>();
//添加add(只能为String类型),删除(remove),遍历(for、增强for、迭代(泛型))、判断都与Conllections一致

  HashSet存储结构:哈希表(数组+链表+红黑树)

在没有重写hashCode和equals方法之前可以添加进去,认为是空对象名数据。

存储过程:

(1)根据hashcode计算保存的位置,如果此位置为空,则直接保存,如果不为空执行第二步;

(2)再执行equals方法,如果equals方法为true,则认为是重复,否则,形成链表。

    //可按alt+insert自动重写   
    @Override
    public int hashCode() {
        int n1 = this.name.hashCode();
        int n2 = this.ages;
        return n1+n2;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null )
            return false;
        if(obj instanceof Person){
            Person p = (Person) obj;
            if(this.name.equals(p.getName())&&this.ages==p.getAges()){
                return true;
            }
        }
        return false;
    }
}

2.TreeSet:基于排列顺序实现元素不重复,实现了SortedSet接口,对集合元素自动排序,元素对象的类型必须实现Comparable接口,指定排序规则。通过CompareTo方法确定是否为重复元素。

TreeSet保存数据,存储结构为红黑树,元素必须要实现Comparable接口,否则无法将元素添加到TreeSet中,compareTo()方法返回值为0,认为是重复元素。

TreeSet<Object> treeSet = new TreeSet<>();
public class Person implements Comparable<Person>{
    //先按姓名比后按年龄比
    @Override
    public int compareTo(Person person) {
        int n1 = this.getName().compareTo(person.getName());
        int n2 = this.ages-person.getAges();
        return n1==0 ? n2:n1;
    }
}

Comparator:实现定制比较(比较器),在创建treeset实例时,使用带comparator参数的方法,不需要再到实例类中实现Comparable接口.

/**
 * 要求:使用TreeSet集合实现字符串按照长度进行排序
 * helloworld zhangsan xian wuhang beijing shanghai yunnan
 */
public class TreeSet_test {
    public static void main(String[] args) {
        //创建集合,并指定比较规则
        TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String s, String t1) {
                int n1 = s.length()-t1.length();
                int n2 = s.compareTo(t1);
                return n1==0?n2:n1;
            }
        });
        //添加数据
        treeSet.add("helloworld");
        treeSet.add("zhangsan");
        treeSet.add("xian");
        treeSet.add("wuhang");
        treeSet.add("beijing");
        treeSet.add("shanghai");
        treeSet.add("yunnan");
        System.out.println(treeSet.toString());
    }
}

标签:Java,String,int,20220614,学习,add,泛型,public,treeSet
来源: https://www.cnblogs.com/Joyce-mi7/p/16375908.html