Java工作学习----第十一课 泛型 Set集合 Map集合 Collections工具类 2021.2.3

泛型

反省不能new对象 必须指明是什么类型的

image-20210203191323158

泛型类

public class 类名<T>{

}  //命名规则

泛型接口

public interface 类名<T>{

}  //命名规则

public class A implements 类名<>

在实现得时候必须要指定告诉是什么

泛型方法

public <T>void show(T t){}

好处

  • 提高代码重用性,可以避免使用多态,即方法重载

  • 防止类型转换异常,提高代码安全性

泛型集合

各种集合形式在创建新对象时,方法其中有得,很多行成Object类型得对象,在后边输出对象时还要进行类型转换

不至于所有类型都可以往里边放造成问题

ArrayList<String> arrayList = new ArrayList<String>();
ArrayList<Integer> arrayList1 = new ArrayList<Integer>();

举个例子

ArrayList<Student> arrayList2 = new ArrayList<Student>();

迭代器也是泛型的。

ListIterator<Student> listIterator = arrayList2.listIterator();
          Object nextElement =  listIterator.next();
            System.out.println(nextElement.toString());

比之前的少了一步强制类型转换

Set集合

无序无下标元素不可重复,方法继承Collection

Set<String> set = new HashSet<>();

创建集合

  • 增加数据也是add

  • 删除 用remove 不能用角标删除

  • 遍历 没啥特别的

1。可以使用增强for

2.使用迭代器

  • 判断

contains isEmpty

Set实现类

HashSet集合

先基于HashCode值计算元素存储位置

在进行存入元素哈希码确认前边不存在已知的

存储结构,哈希表:数组+链表+红黑树

使用得方法跟之前学过的相似

在这边使用new Person(“梁朝伟”,25)相同的就可以加进去了,因为不同的数据地址

这里在针对重写equals上得重写是也重写hashCode

image-20210203201248832

TreeSet

基于排序顺序实现不重复

image-20210203201824509

红黑树:二叉查找树,有根节点,左边的放小的,右边的放大的

各个方法与上边的集合访问一样,增加 删除 遍历 判断

注意点

实现comparable接口

在增加对象时,若存在两个参数,因为他要比较实现自动排序,所以必须要规定一个可以作为参数的唯一标准

所增加对象的类中必须实现Comparable接口,否则出现以下情况

image-20210203202557555

@Override
public int compareTo(Student o) {
    int n2 = this.age - o.age;

    return n2;
} //对于下边图片的接口继承的重写

image-20210203202953503

继承Comparable以后没事了

image-20210203203106703

使用Comparator,在创建数组时已经规定了比较规则

TreeSet<Student> hashSet1=new TreeSet<>(new Comparator<Student>() {

    @Override
    public int compare(Student o1, Student o2) {
        int n2 = o1.age - o2.age;
        return n2;
    }
});

Map接口

存储一对数据,可以重复,无序,无下标

image-20210203205103916

生成Map集合
Map<String, String> map = new HashMap<>();

增加对象不是使用,add了 使用put

map.put("1", "黄");
map.put("2", "黄2");
map.put("3", "黄3");
增加相同的key,不能相同比如
map.put("3", "黄3");
map.put("3", "黄");

但是后边的值如果相等,是可以的,但是后边的黄黄会把黄替换掉

map.put("3", "黄");
map.put("4", "黄黄");
删除:使用key
map.remove("3");
遍历
使用keySet()
//遍历数组,使用keySet,跟Map对象里边的get(s)
        Set<String> keyset= map.keySet();
        for (String s : keyset) {
            System.out.println(s+map.get(s));
        }
使用entrySet
//遍历数组,使用Entry,getKey跟getValue
//Map.Entry<String, String>,归这下边的一个子类
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {

    System.out.println(entry.getKey() + "------" + entry.getValue());
}
两者区别

image-20210203212232145

entrySet效率高

判断

containsKey();

containsValue();

Map实现类
HashMap使用,跟上边的HashSet很像。
TreeMap

跟上边的TreeSet很像

Collections工具类

//排序操作
Collections.sort(arrayList);
//查找二分查找binarySearch  在arrayList集合里能否找到2,找到就返回所在数组的下标
System.out.println(Collections.binarySearch(arrayList,1));
//赋值copy,因为赋值要求集合大小相同,所以只能如此
 ArrayList<Integer> arrayList1 = new ArrayList<>();
for (int i = 0; i < arrayList.size(); i++) {
            arrayList1.add(0);
        }
        Collections.copy(arrayList1,arrayList);

//反转reverse   打乱:shuffle
 Collections.reverse(arrayList);
 Collections.shuffle(arrayList);
//toArray 转换成数组toArray()
System.out.println(arrayList.toArray().length);

//数组变成集合,是一个受限几个,不能添加跟删除,因为大小已经限制了
        //基本数据类型在转成集合时,需要把他转成引用类型
        String[] strings = {"张三","李四"};
       List<String> arrayList2 = Arrays.asList(strings);

总结

image-20210203220907185

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秀才大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值