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

泛型

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

image-20210203191323158

泛型类

public class 类名<T>{
     

}  //命名规则

泛型接口

public interface 类名<T>{
     

}  //命名规则

public class A implements 类名<>

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

泛型方法

public 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

基于排序顺序实现不重复

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

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

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

注意点

实现comparable接口

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

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

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

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

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

image-20210203202953503

继承Comparable以后没事了

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

使用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接口

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

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

生成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,归这下边的一个子类
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
     

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

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

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);

总结

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

你可能感兴趣的:(java学习,java,数据结构,多态,hashmap,链表)