JAVA 集合(Collections,泛型,set)

Collections

1.是一个集合工具类
2.特点:方法私有,方法都是静态的
3.使用:类名直接调用
4.方法
static <T> boolean addAll(Collection<? super T> c, T... elements)->批量添加元素
static void shuffle(List<?> list) ->将集合中的元素顺序打乱
static <T> void sort(List<T> list) ->将集合中的元素按照默认规则排序
static <T> void sort(List<T> list, Comparator<? super T> c)->将集合中的元素按照指定规则排序

public class Demo01Collections {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        //static <T> boolean addAll(Collection<? super T> c, T... elements)->批量添加元素
        Collections.addAll(list,"张三","李四","王五","赵六","田七","朱八");
        System.out.println(list);
        //static void shuffle(List<?> list) ->将集合中的元素顺序打乱
        Collections.shuffle(list);
        System.out.println(list);
        //static <T> void sort(List<T> list) ->将集合中的元素按照默认规则排序-> ASCII码表
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("c.举头望明月");
        list1.add("a.床前明月光");
        list1.add("d.低头思故乡");
        list1.add("b.疑是地上霜");
        Collections.sort(list1);
        System.out.println(list1);
    }
}

扩展方法:Arrays类中的方法,List asList(T...a)直接指定元素,转存到list集合中

 public static void main(String[] args) {
     List<String> list = Arrays.asList("张三", "李四", "王五");
     System.out.println(list);
 }

泛型⭐⭐⭐⭐⭐

1.使用层面:统一类型,防止类型转换异常
注意:
a.泛型中的类型必须是引用类型
b.如果泛型不写,默认类型为Object
2.定义层面:
定义带有泛型的类,方法,接口,将来使用的时候给泛型确定什么类型,泛型就是什么类型,灵活,通用。

3.含有泛型的类

//含有泛型的类
public class 类名<E>{
}
//new 对象的时候确定类型

4.含有泛型的方法

修饰符 <E> 返回值类型 方法名(E e){
}
//调用方法的时候确定类型

5.含有泛型的接口

public interface 接口名<E>{
}

//1.在实现类的时候不确定类型,只能在new的时候确定类型
public interface MyList <E>{
    public boolean add(E e);
}

public class MyArrayList1<E> implements MyList<E>{
    //定义一个数组,充当ArrayList底层的数组,长度直接规定为10
    Object[] obj = new Object[10];
    //定义size,代表集合元素个数
    int size;
    /**
     * 定义一个add方法,参数类型需要和泛型类型保持一致
     *
     * 数据类型为E  变量名随便取
     */
    public boolean add(E e){
        obj[size] = e;
        size++;
        return true;
    }
    /**
     * 定义一个get方法,根据索引获取元素
     */
    public E get(int index){
        return (E) obj[index];
    }
    @Override
    public String toString() {
        return Arrays.toString(obj);
    }
}
public class Demo04Genericity {
    public static void main(String[] args) {
        MyArrayList1<String> list1 = new MyArrayList1<>();
        list1.add("张三");
        list1.add("李四");
        System.out.println(list1.get(0));

    }
}

//2.在实现类的时候就确定类型
public interface MyIterator <E>{
    E next();
}

public class MyScanner implements MyIterator<String>{
    @Override
    public String next() {
        return "涛哥和金莲的故事";
    }
}
public class Demo05Genericity {
    public static void main(String[] args) {
        MyScanner myScanner = new MyScanner();
        String result = myScanner.next();
        System.out.println("result = " + result);
    }
}

6.泛型通配符
上限

<? extends 类型>
?接收的extends后面的本类以及子类类型

下限

<? super 类型>
?接收的是super后面的本类以及父类类型

set集合⭐⭐⭐⭐⭐

1.Hashset

特点

a.元素唯一
b.元素无序
c.线程不安全
d.无索引

底层数据结构:

哈希表
jdk8前 哈希表=数组+链表
jdk8后 哈希表=数组+链表+红黑树(红黑树为了查找更快)

方法

和Collection一样

遍历(没索引)

增强for
迭代器

2.LinkedHashSet(HashSet的一个子类)
特点

a.元素唯一
b.元素有序
c.线程不安全
d.无索引

底层数据结构

哈希表+双向链表

使用

和HashSet一样

3 set集合如何去重复

1.先计算元素的哈希值(重写hashCode方法),再比较内容(重写equals方法)
2.先比较哈希值,如果哈希值不一样,直接存
3.如果哈希值一样,再比较内容
a.如果哈希值一样,内容不一样,存
b.如果哈希值一样,内容也一样,去重复

4.HashSet存储自定义类型如何去重复

1.如果HashSet存储自定义类型,如何去重复呢?重写hashCode和equals方法,让HashSet比较属性的哈希值以及属性的内容
2.如果不重写hashCode和equals方法,默认调用的是Object中的,不同的对象,肯定哈希值不一样,equals比较对象的地址值也不一样,所以此时即使对象的属性值一样,也不能去重复

笔记来源 尚硅谷

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值