今日内容

1. List列表如何去重

List列表如何去重方式一创建新的集合,判断输入的数是否与已经有的数重复---重复,则不录入---没有重复,录入方式二选择排序思想!将集合里指定的数拿出来和其它数作比较,若有重复,则删除!
//方式一--新建集合思想
import java.util.Objects;
​
//测试用类
public class Student {//为方便观察private String name ;private int age ;//构造方法
​public Student() { //无参构造}
​public Student(String name, int age) { //有参构造this.name = name;this.age = age;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
​@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
​@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && name.equals(student.name);}
​@Overridepublic int hashCode() {return Objects.hash(name, age);}
}
​
​
​
import java.util.ArrayList;
import java.util.List;
​
//测试List集合去重方式一
//创建新的集合,判断输入的数是否与已经有的数重复
public class ListTest {public static void main(String[] args) {//创建数据Student student = new Student("钟离",500) ;Student student1 = new Student("胡桃",18) ;Student student2 = new Student("胡桃",18) ;Student student3 = new Student("胡桃",19) ;//年龄不一样Student student4 = new Student("胡",18) ;//姓名不一样//创建集合List<Student> list = new ArrayList() ; //接口多态//存入数据list.add(student);list.add(student1);list.add(student2);list.add(student3);list.add(student4);//创建新集合--实现去重!List<Student> list1 = new ArrayList() ;//遍历老集合list--将数据一一存入新集合for(int x = 0 ; x < list.size() ; x++){ //集合长度时size()//完成判断,是否有重合数据---contains,判断是否包含指定数据//一定要重写equals() and hashCode(),不然作用相当于==if(!list1.contains(list.get(x))){ //判断新集合list1中是否有老集合list中的数据//如果不包含list1.add(list.get(x));//添加数据}}//遍历新集合---增强forfor (Student s: list1){System.out.println(s);}}
}
//方式二---选择排序思想
import java.util.Objects;
​
public class Student {private String name ;private int age ;
​public Student() {}
​public Student(String name, int age) {this.name = name;this.age = age;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
​@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
​@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && name.equals(student.name);}
​@Overridepublic int hashCode() {return Objects.hash(name, age);}
}
​
​
​
import java.util.ArrayList;
import java.util.List;
​
//测试方式二--选择排序思想
public class ListTest {public static void main(String[] args) {//创建数据Student student = new Student("钟离",500);Student student1 = new Student("胡桃",18);Student student2 = new Student("胡桃",20);Student student3 = new Student("胡桃",18);Student student4 = new Student("胡",18);//创建集合List list = new ArrayList() ;//录入数据list.add(student) ;list.add(student1) ;list.add(student2) ;list.add(student3) ;list.add(student4) ;//选择排序思想for(int x = 0 ; x < list.size()-1 ; x++){for(int y = x+1 ; y<list.size() ; y++){//完成判断重复并删除if(list.get(x).equals(list.get(y))){//完成删除list.remove(y) ;}}}//增强for遍历查看结果for(Object s: list){System.out.println(s);//成功去重}}
}

2. Vector

Vector--集合线程安全的类-底层结构是数组-查询快-修改等操作慢特有功能public void addElement(E obj)-E,相当于任意类型,名称不一样罢了---将指定的内容加入到集合中--默认追加--末尾public Enumeration elements()---获取枚举组件接口--相当于Iterator迭代器Enumeration接口boolean hasMoreElement()---判断是否有更多的元素-相当于Iterator中的hasNext()E nextElement()---获取下一个元素---相当于Iterator中的next()public E elementAt(int index)---通过角标获得元素---相当于List中的get(int index)int size()---获取集合元素数--相当于数组中的length属性--String中的length()方法
import java.util.Enumeration;
import java.util.Vector;
​
//测试Vector集合功能和方法
public class VectorTest {public static void main(String[] args) {//创建集合Vector<String> vector = new Vector() ;//添加--默认末尾--录入数据vector.addElement("钟离");vector.addElement("胡桃");vector.addElement("宵宫");System.out.println(vector);//[钟离, 胡桃, 宵宫]//通过角标获得元素System.out.println(vector.elementAt(1));//胡桃//遍历集合---方式一--不断的输入角标值来获得集合全部内容for(int x = 0 ; x < vector.size() ; x++){String s = vector.elementAt(x);//循环获取赋值System.out.print(s+"\t");//钟离   胡桃  宵宫}System.out.println();//遍历集合---方式二--通过特有的枚举器获得Enumeration<String> e = vector.elements();//不加泛型,下面就要强转while (e.hasMoreElements()){String s1 = e.nextElement() ;System.out.print(s1+"\t");//钟离  胡桃  宵宫}}
}

3. LinkedList

LinkedList--集合线程不安全-底层结构是链表-查询慢-修改等操作快特有功能public void addFirst()---添加一个元素到链表的开始public void addLast()---添加一个元素到链表的结束public E getFirst()---获取第一个元素public E getLast()---获取最后一个元素public E removeFirst()---删除第一个元素并返回--会打印在控制台public E removeLast()---删除最后一个元素并返回--会打印在控制台
//模拟栈结构--先进后出,后进先出!
import java.util.LinkedList;
/*类名<T>{方法名<T>(){}---将泛型定义在方法上--不知道会获得什么类型的数据*/
//模拟占内存空间
public class MyStack<T>{private LinkedList<T> linkedList ;//创建私有化成员变量//无参构造方法public MyStack(){ //只要创建MyStack的对象,自动生成LinkedList集合!linkedList = new LinkedList<>() ;//相当于创建了LinkedList的对象}//T--泛指所有数据类型public void addMyStack(T t){ //压栈--存入数据linkedList.addFirst(t); //将数据存入集合的开始位置}public T getMyStack(){//弹栈--删除数据return linkedList.removeFirst();//删除集合中的第一个元素--相当于弹栈!}//判断是否为空public boolean IsEmptyMyStack(){return linkedList.isEmpty();//判断是否为空}
​@Overridepublic String toString() {return "MyStack{" +"linkedList=" + linkedList +'}';}
}
​
​
​
//模拟栈结构存储,先进后出
public class LinkedListTest {public static void main(String[] args) {//其实可以直接使用LinkedList操作,但是为了模拟,新建了MyStackMyStack myStack = new MyStack();//无参构造直接创建了集合//模拟压栈//调用方法,方法体中是存入集合的开始位置,永远存入第一个位置,模拟了压栈!myStack.addMyStack("钟离");//位置0-->位置1-->位置2myStack.addMyStack("胡桃");//位置0-->位置1myStack.addMyStack("宵宫");//位置0//...System.out.println(myStack);//MyStack{linkedList=[宵宫, 胡桃, 钟离]}-0,1,2//模拟弹栈myStack.getMyStack();System.out.println(myStack);//MyStack{linkedList=[胡桃, 钟离]}//全部弹出while (!myStack.IsEmptyMyStack()){ //非空判断System.out.println(myStack.getMyStack());}}
}

4. Set

Set---集合元素唯一的集合,默认情况下使用HashSet进行实现接口

4.1 HashSet

HashSet底层依赖HashMap(哈希表结构)--元素唯一,迭代顺序无法保证!底层依赖HashMap的put方法-->依赖于equals()/HashCode()方法!--必须重写,保证唯一性!
//使用Random产生10个随机数,存储到集合中,保证元素唯一!
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
​
//使用Random产生10个随机数,存储到集合中,保证元素唯一!
public class HashSetTest {public static void main(String[] args) {//创建集合Set set = new HashSet() ;//接口多态Random random = new Random() ;int i = 0 ;while (i<10){set.add(random.nextInt(11));//生成数取[0,11)--->0~10i++;}System.out.println(set);}
}

4.2 TreeSet

TreeSet--集合Set集合的子实现类,满足集合元素的唯一性底层基于TreeMap<K,V>--红黑树(red-black-Tree)---自然排序---比较器排序
自然排序方法---使用前提是,存入数据必须实现Comparable接口!重写CompareTo()方法!构造方法public TreeSet()---创建一个无参的构造方法--创建一个空树,里面的元素要按照自然排序顺序排列!
import java.util.Objects;
​
public class Student implements Comparable<Student>{ //必须实现Comparableprivate String name ;private int age ;
​public Student() {}
​public Student(String name, int age) {this.name = name;this.age = age;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
​@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
​@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && name.equals(student.name);}
​@Overridepublic int hashCode() {return Objects.hash(name, age);}
​@Overridepublic int compareTo(Student s) { //方法重写,完成具体条件//以年龄为标准int num = this.age - s.age ;//判断,如果老年龄-新年龄等于零--->年龄不能作为条件来判断时,启用副条件!//以姓名为副条件判断int num1 = num==0?(this.name.compareTo(s.name)):num;//compareTo()按字典序列比较//如果还不行,以新的副条件来进行判断return num1;}
}
​
​
​
import java.util.TreeSet;
​
/*存储Student类型,完成自然排序!排序条件(主要条件)按照学生的年龄从小到大排序*/
public class TreeSetTest {public static void main(String[] args) {//创建数据Student student = new Student("钟离",500);Student student1 = new Student("胡桃",18);Student student2 = new Student("胡桃",19);Student student3 = new Student("胡桃开心",18);Student student4 = new Student("胡桃",20);Student student5 = new Student("宵宫",18);Student student6 = new Student("hutao",18);Student student7 = new Student("胡桃",18);//创建集合---使用自然排序TreeSet<Student> treeSet = new TreeSet();//无参构造--自然排序--数据都要实现Comparable接口!//录入数据treeSet.add(student);treeSet.add(student1);treeSet.add(student2);treeSet.add(student3);treeSet.add(student4);treeSet.add(student5);treeSet.add(student6);treeSet.add(student7);//增强for遍历输出结果!for(Student s: treeSet){System.out.println(s);}}
}
比较器排序---创建实现类来实现Comparable接口,不一定是数据类!构造方法public TreeSet(Comparator<? super E>comparator)--创建一个有参的构造方法,用比较器来实现排序
//数据类不需要实现Comparator接口
public class Student{private String name ;private int age ;
​public Student() {}
​public Student(String name, int age) {this.name = name;this.age = age;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
​@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}
​
​
​
import java.util.Comparator;
​
//创建实现类用来实现Comparator接口
public class Demo implements Comparator<Student> {@Overridepublic int compare(Student s1, Student s2) {//以年龄为主要条件int num = s1.getAge()-s2.getAge();//s1相当于自然排序的thisint num1 = num==0?(s1.getName().compareTo(s2.getName())):num;//s2相当于自然排序的sreturn num1;}
}
​
​
​
import java.util.Comparator;
import java.util.TreeSet;
​
public class TreeSetTest {public static void main(String[] args) {//创建数据Student student = new Student("钟离",500);Student student1 = new Student("钟",50);Student student2 = new Student("钟离",50);Student student3 = new Student("离",500);Student student4 = new Student("钟离",8);Student student5 = new Student("钟离",18);Comparator comparator = new Demo();TreeSet<Student> treeSet = new TreeSet(comparator);//录入数据treeSet.add(student);treeSet.add(student1);treeSet.add(student2);treeSet.add(student3);treeSet.add(student4);treeSet.add(student5);//增强for遍历for(Student s: treeSet){System.out.println(s);}}
}

JAVA11_17学习总结(还是集合!)相关推荐

  1. MATLAB中深度学习的数据集合

    简 介: 本文总结了部分MATLAB中用于深度学习的数据集合. 关键词: MATLAB,DEEPLENARING #mermaid-svg-xPWl4yTsAw5Z4HFe {font-family: ...

  2. Python学习笔记:集合(set)

    Python学习笔记:集合(set) 1.集合概念 集合是互异元素的无序集合.类似于只有键没有值的字典. 2.创建集合 有两种方法创建集合:一个是利用set函数,一个是利用花括号创建集合字面量. 3. ...

  3. 网易之小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.需要根据给定的w,x,y,z,求出集合中一共有多少个元素。

    import java.util.HashSet; import java.util.Scanner; import java.util.Set;/*** 小易最近在数学课上学习到了集合的概念,集合有 ...

  4. 【网易笔试】小易最近在数学课上学习到了集合的概念

    /***************************************************** 小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性. ...

  5. MongoDB学习笔记~对集合属性的操作

    $unset清除元素 请注意在单个数组元素上使用$unset的结果可能与你设想的不一样.其结果只是将元素的值设置为null,而非删除整个元素.要想彻底删除某个数组元素,可以用$pull 和$pop操作 ...

  6. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  7. NetLogo学习笔记3 —— 集合操作与生命游戏

    NetLogo学习笔记3 -- 集合操作与生命游戏 (这篇新知识点略多) 上一篇文章我们了解NetLogo模型的基本要素,学习了函数定义与ask语法.并编写了我们的第一个程序! 这一次,我们来编写一个 ...

  8. Ubuntu学习(应用集合、命令行以及遇到的问题)

    2019独角兽企业重金招聘Python工程师标准>>> 一.应用集合 应用的安装我单独写了一篇文章,见 https://my.oschina.net/u/3304023/blog/1 ...

  9. Oracle 学习笔记 14 -- 集合操作和高级子查询

    Oracel提供了三种类型的集合操作:各自是并(UNION) .交(INTERSECT). 差(MINUS) UNION :将多个操作的结果合并到一个查询结果中,返回查询结果的并集,自己主动去掉反复的 ...

最新文章

  1. Python全栈开发,Day1 - Python基础1
  2. C#协变和逆变 - 译
  3. 十四、Linux进程编程
  4. python随机抽取人名_用Python打造一个CRM系统(五)
  5. python列表和字典_python使用for遍历字典、列表和字符串的几种方法
  6. [js] 模拟 localStorage 时如何实现过期时间功能
  7. excel插入行 uipath_Uipath中excel的activities用法介绍
  8. NYOJ 1077 【博弈+大整数取模】
  9. chrome最新Android版本,谷歌chrome浏览器安卓版下载,谷歌chrome浏览器安卓最新版本下载地址 v70.0.3538.110 - 浏览器家园...
  10. Python 数据分析与挖掘概述
  11. Flash版Logo语言9.83
  12. HTML页面跳转及参数传递
  13. Aspenone.hysys.V7.1多国语言包(含中文)
  14. DSN格式转SCH格式
  15. CORE | AAAI2020:分子自动优化模型
  16. iOS-app更新和强制更新
  17. 超好用的Redis管理及监控工具
  18. 分子生物学总结完整版
  19. 判断两个数是否互为素数(质数)
  20. win10无法连接网络里的其他计算机名,win10系统无法访问局域网的其他电脑的解决办法...

热门文章

  1. 数据库系统原理与应用教程(002)—— MySQL 安装与配置:MySQL 软件的卸载(windows 环境)
  2. Word文档批量生成工具分享
  3. Word文件安装WPS后无法预览
  4. Java校验入参之正则表达式校验特殊字符
  5. chrome extension develope(1)
  6. java使用List<>存储数据,数据重复
  7. 英特尔官方发布Atom N435芯片
  8. 史文勇:我没被协助调查 林宇发布管理层调整是泡制假新闻
  9. 浅析加密算法七【RSA密码】
  10. Mongodb sum 求和