大学

编程入门 行业动态 更新时间:2024-10-19 22:33:51

<a href=https://www.elefans.com/category/jswz/34/1770028.html style=大学"/>

大学

第十四章 泛型与集合框架

  • 15.1 泛型
  • 15.2 链表
    • 15.2.1 LinkedList<>泛型类
    • 15.2.2 常用方法
  • 15.2.3 遍历列表
    • 15.2.4 排序与查找
    • 15.2.5 排序与查找
    • 15.2.5 洗牌与旋转
  • 15.3 堆栈
  • 15.4 散类映射
  • 15.5 树集
  • 15.6 树映射
  • 15.7 集合
  • 15.8 举例应用

15.1 泛型

  • 介绍:泛型就是泛泛的类型,即不确定其是什么类型。
  • 泛型类的声明
    • 泛型的声明:class People<E>用此类构造对象的时候不知道它是什么类型,需要自己设定。
    • 非泛型的声明:class People用此类构造对象对象的类型就是People类型。
  • 使用泛型类声明对象
    • People<LocalTime>zhang = new People<LocalTime>();
    • 注意泛型对象声明的同时在尖括号中需要制定明确的类,不能不指定或者是不确定的类。
  • 实现泛型接口
    • public interface Comparable<T>{public int compareTo(T m)}(这个地方不太懂格式就是这样,以后再说)
  • 例子
    • 这个例子就是
      People.java
    public class People<E> {E friend;public void setFriend(E object) {friend = object;} public E getFriend(){return friend;}
    }
    
    Example15_1.java
    import java.time.*;
    public class Example15_1 {public static void main(String args[]) {//将泛型E指定为LocalTimePeople<LocalTime> zhang=new People<LocalTime>();zhang.setFriend(LocalTime.now());LocalTime zhangFriend = zhang.getFriend();System.out.println(zhangFriend);People<Double> geng = new People<Double>() ;geng.setFriend(1.618);double gengFriend = geng.getFriend();System.out.println(gengFriend); }
    }
    
    Dog.java
    public class Dog implements Comparable<Dog> {int weight;public int compareTo(Dog m){if(weight>m.weight)return 1;else if(weight == m.weight)return 0;elsereturn -1;}public static void main(String args[]){Dog dog1 = new Dog();Dog dog2 = new Dog();dog1.weight = 20;dog2.weight = 25; System.out.println(dog1pareTo(dog2));}
    }
    

15.2 链表

15.2.1 LinkedList<>泛型类

  • 介绍:存储数据的一种方法,每一个数据节点中包含:本节点数据、上一节点的数据、下一个节点的数据或者:本节点数据、下一节点数据
  • 用到的类和使用方法
    • 用到的类:java.util 包中LinkedList<>
    • 使用方法(创建双向链表):LinkedList<String> mylist = new LinkedList<String>()
  • 例子(链表都是String类型的)
LinkedList<String> mylist = new LinkedList<String>();
mylist.add("How");
mylist.add("Are");
mylist.add("You");
mylist.add("Java");

15.2.2 常用方法

  1. 重要的概念:在链表中比较链表中有没有某个内容,注意比较的是具体的内容不是引用。
  2. 原理(自己理解):把要比价的来个内容转化为同一类型,然后若内容一样,应用值一样然后equals()比较引用。(==比较的就是引用)

15.2.3 遍历列表

  • JVM中为各种数据结构集合都提供了迭代器。
  • 链表对象的迭代器:可以通过iterator()获得一个Iterator对象这个对象就是迭代器。
  • 迭代器的优势:能更好的使用缓存和预取机制,有时可能比get()方法更快。
  • 例子(比较读取列表中的数据速度所用的时间)
    import java.util.*;
    public class Example15_3 {public static void main(String args[]){List<String> list=new LinkedList<String>();for(int i=0;i<=60096;i++){list.add("speed"+i);}Iterator<String> iter=list.iterator();long startTime = System.nanoTime();while(iter.hasNext()){String te=iter.next();}long estimatedTime = System.nanoTime() - startTime;System.out.println("迭代器所用时间:"+estimatedTime+"纳秒");startTime = System.nanoTime();for(int i=0;i<list.size();i++){String te=list.get(i);}estimatedTime = System.nanoTime() - startTime;System.out.println("get方法所用时间:"+estimatedTime+"纳秒");}
    }
    

15.2.4 排序与查找

  • 介绍:遍历列表可以使用get+while循环得到列表中的内容,但是由于数据不是按照列表节点中的顺序存储的,从而get方法特意的去按照节点的顺序去遍历列表反而会减慢遍历速度,从而产生了迭代器。
  • 用法:用iterator()方法获取一个Iterator对象,针对当前列表的迭代器。Iterator<String> iter = list.iterator()
  • 例子
    import java.util.*;
    public class Example15_3 {public static void main(String args[]){List<String> list=new LinkedList<String>();for(int i=0;i<=60096;i++){list.add("speed"+i);}Iterator<String> iter=list.iterator();long startTime = System.nanoTime();while(iter.hasNext()){String te=iter.next();}long estimatedTime = System.nanoTime() - startTime;System.out.println("迭代器所用时间:"+estimatedTime+"纳秒");startTime = System.nanoTime();for(int i=0;i<list.size();i++){String te=list.get(i);}estimatedTime = System.nanoTime() - startTime;System.out.println("get方法所用时间:"+estimatedTime+"纳秒");}
    }
    

15.2.5 排序与查找

  • 介绍:对列表中的数据要进行排序就使用Collections类中的方法。其中比较特殊的方法是sort方法如果对于非String对象需要重写CompareTo<>接口中的compareTo()方法因为使用sort()方法时,此方法就用到compareTo()方法。

  • 查找的方法:int binarySearch(List<T>list,T key,CompartTo<T>c)返回的索引的位置。

  • 重新定义不想改动接口中重写的compareTo()方法但还想比较其他的变量:Collections.sort(list,(a,b)->{ return a.weight-b.weight;});

  • 例子

    import java.util.*;
    class Student implements Comparable<Student> { int height=0;int weight;String name;Student(String n,int h,int w) {name=n;height = h;weight = w;}public int compareTo(Student st) { //两个Student对象大小关系return (this.height-st.height);}
    }
    public class Example15_4 {public static void main(String args[ ]) { List<Student> list = new LinkedList<Student>();list.add(new Student("张三",188,86));list.add(new Student("李四",178,83));list.add(new Student("赵大龙",198,89)); list.add(new Student("李云龙",175,80));Iterator<Student> iter=list.iterator();System.out.println("排序前,链表中的数据:");while(iter.hasNext()){Student stu=iter.next();System.out.println(stu.name+ "身高:"+stu.height);}Collections.sort(list);System.out.println("排序(按身高)后,链表中的数据:");iter=list.iterator();while(iter.hasNext()){Student stu=iter.next();System.out.println(stu.name+ "身高:"+stu.height);}Student zhaoLin = new Student("zhao xiao lin",178,80);int index = Collections.binarySearch(list,zhaoLin,null);if(index>=0) {System.out.println(zhaoLin.name+"和链表中"+list.get(index).name+"身高相同.");}Collections.sort(list,(a,b)->{ return a.weight-b.weight;});System.out.println("排序(按体重)后,链表中的数据:");iter=list.iterator();while(iter.hasNext()){Student stu=iter.next();System.out.println(stu.name+ "体重:"+stu.weight);}index = Collections.binarySearch(list,zhaoLin,(a,b)->{ return a.weight-b.weight;});if(index>=0) {System.out.println(zhaoLin.name+"和链表中"+list.get(index).name+"体重相同.");}}
    }
    

15.2.5 洗牌与旋转

  • 介绍:就是打乱顺序、轴对称数据和评议数据。
  • 方法
    • 随机顺序排序:public static void shuffle(List<E>list)
    • 转动:static void rotate(List<E> list,int distance)旋转链表中的数据,distance正数是向右旋转
    • 翻转public static void reverse(List<E>list)123变为321
  • 例子
    import java.util.*;
    public class Example15_5 {public static void main(String args[ ]) { List<Integer> list = new LinkedList<Integer>();for(int i=10;i<=50;i=i+10)list.add(i);System.out.println("洗牌前,链表中的数据");Iterator<Integer> iter=list.iterator();while(iter.hasNext()){int n=iter.next();System.out.printf("%d\t",n);}System.out.printf("\n");Collections.shuffle(list);System.out.printf("\n洗牌后,链表中的数据\n");iter=list.iterator();while(iter.hasNext()){int n=iter.next();System.out.printf("%d\t",n);}System.out.printf("\n");System.out.printf("\n向右旋转1次后,链表中的数据\n");Collections.rotate(list,1);iter=list.iterator();while(iter.hasNext()){int n=iter.next();System.out.printf("%d\t",n);}System.out.printf("\n");}
    }
    

15.3 堆栈

15.4 散类映射

15.5 树集

15.6 树映射

15.7 集合

15.8 举例应用

更多推荐

大学

本文发布于:2024-03-07 20:34:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718854.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:大学

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!