• 集合collection listmapset


    collection 无序无下标不能重复,和set的方法基本一样

    只有list 有序有下标可以重复

    collection接口没有直接的实现子类,通过list和set来实现:collection s=new Arraylist

    想看继承关系图,左键+Ctrl 

    传入集合,并对价格进行冒泡排序,遍历输出tostring

     

    linkedlist,双向链表

     

     

     

    迭代器迭代过程中不能使用其他方法改变集合元素

     iterator迭代里用collection.remove,报错并发修改异常

    迭代器提供的remove可以用,it.remove()

     

     

     列表迭代器listIterator,有next还有previous,所以可以逆序遍历

     list.indexof(元素) 返回位置下标,LIst newlist=list.sublist(1,4)截取部分列表2,3,4,

     添加的数字是int列表会自动装箱成Integer

    进入源码:点住+ctrl

     list.remove(20)报错数组越界,要让他识别出20是Integer不是index

    list.remove((Object)20)   list.remove(new Integer(20))

    遍历也可以用增强for,每次取出的是Obiect

    for(Object o:list){}

    对于LIst接口,可以出现一模样的元素。想要让它认为只要student的所有属性一样就是同一个对象,那就要重写下equals方法,元素是student,在student类里面重写了equals方法,

    1. public class Student {
    2. private String name;
    3. @Override
    4. public String toString() {
    5. return "name"+name+" age"+age;
    6. }
    7. private int age;
    8. public Student(String name,int age)
    9. {
    10. this.name=name;
    11. this.age=age;
    12. }
    13. @Override//如果把两者当成同一个就return true
    14. public boolean equals(Object obj) {
    15. if(obj==this){return true;}
    16. if(obj instanceof Student)
    17. {
    18. Student o=(Student)obj;
    19. if(o.age==this.age&&o.name.equals(this.name))
    20. {
    21. return true;
    22. }
    23. }
    24. return false;
    25. }
    26. }
    1. import java.util.*;
    2. public class test01 {
    3. public static void main(String[] args) {
    4. ArrayList students = new ArrayList<>();
    5. students.add(new Student("a", 1));
    6. students.add(new Student("b", 2));
    7. students.add(new Student("c", 3));
    8. System.out.println(students.size());//3个
    9. students.add(new Student("a", 1));//用new了就开辟新空间存,位置都不一样了,即使重写equals也没用
    10. System.out.println(students.size());//4个 因为开辟新空间,两个元素存放的位置不同
    11. //我想要它认为两元素的student属性一模一样就看成同一元素,就要去Students类重写下equals方法
    12. students.remove(new Student("a", 1));//remove会用到equals方法,重写改成如果属性一样返回true,
    13. System.out.println(students.size());//3
    14. Student s = new Student("s", 8);
    15. students.add(s);
    16. students.add(s);//5个
    17. System.out.println(students.size());
    18. System.out.println("-----------------------------");
    19. TreeSet p = new TreeSet<>();//Treeset的元素的类必须实现comparable接口,因为要有排序功能
    20. p.add(new Person("a", 9));
    21. p.add(new Person("b", 9));
    22. p.add(new Person("c", 9));
    23. p.add(new Person("a", 9));//不能加入
    24. System.out.println(p.size());//3个
    25. System.out.println("--------------------");
    26. HashSet people = new HashSet<>();
    27. //存储过程(重复依据)
    28. //根据hashCode计算保存的位置,如果位置为空,直接保存,若不为空,进行第二步(如果hashcode不一样直接加入)
    29. //再执行equals方法,如果equals为true(元素属性一样),则认为是重复,否则形成链表
    30. people.add(new Person("a", 9));
    31. people.add(new Person("b", 9));
    32. people.add(new Person("c", 9));
    33. people.add(new Person("a", 9));//没改equals和hashcode之前可以加,改后不能加
    34. System.out.println(people.size());
    35. System.out.println("--------------------------------------------------------");
    36. Map integerStudentMap = new HashMap<>();
    37. integerStudentMap.put(1, new Student("a", 1));
    38. integerStudentMap.put(2, new Student("b", 2));
    39. integerStudentMap.put(1, new Student("c", 5));//键一样值覆盖
    40. //keyset遍历
    41. Set ks = integerStudentMap.keySet();
    42. for (Integer i : integerStudentMap.keySet())//i的类型是Set后面尖括号里的泛型
    43. {
    44. System.out.println("key" + i + " value" + integerStudentMap.get(i));
    45. //key1 valuenamec age5
    46. //key2 valuenameb age2
    47. }
    48. //entryset遍历
    49. Set> entries = integerStudentMap.entrySet();
    50. for (Map.Entry e : integerStudentMap.entrySet())//e的类型是set后面尖括号里的泛型,直接照抄
    51. {
    52. System.out.println(e.getKey() + " " + e.getValue());
    53. //1 namec age5
    54. //2 nameb age2
    55. }
    56. ArrayList students1 = new ArrayList<>();
    57. students1.add(new Student("moday",1));
    58. students1.add(new Student("tuesday",2));
    59. Student[]students2= (Student[]) students1.toArray();
    60. Student[] emptyarry=students1.toArray(new Student[10]);
    61. //数组转列表,不能增删
    62. Integer[]a={1,2,3};
    63. Listas=Arrays.asList(a);
    64. // 把基本类型数组转为集合时,需要修改为包装类
    65. Integer[] nums = {100, 200, 300, 400, 500};
    66. List list3 = Arrays.asList(nums);
    67. }

    1. public class Person implements Comparable<Person>{
    2. private String name;
    3. private int age;
    4. public Person(String name,int age)
    5. {
    6. this.name=name;
    7. this.age=age;
    8. }
    9. @Override
    10. public boolean equals(Object obj) {
    11. if(obj==this){return true;}
    12. if(obj instanceof Person)
    13. {
    14. if(((Person) obj).age==this.age&&((Person) obj).name.equals(this.name))
    15. {
    16. return true;
    17. }
    18. }
    19. return false;
    20. }
    21. @Override
    22. public int hashCode() {
    23. int n1=this.age;
    24. int n2=this.name.hashCode();
    25. return n1+n2;
    26. }
    27. @Override
    28. public int compareTo(Person o) {
    29. int n1=o.age-this.age;
    30. int n2=o.name.compareTo(this.name);
    31. return (n1==0?n2:n1);
    32. }
    33. }
    34. HashMap刚创建时,table是null,节省空间,当添加第一个元素时,table容量调整为16
    35. 当元素个数大于阈值(16*0.75 = 12)时,会进行扩容,扩容后的大小为原来的两倍,目的是减少调整元素的个数
    36. jdk1.8 当每个链表长度 >8 ,并且数组元素个数 ≥64时,会调整成红黑树,目的是提高效率
    37. jdk1.8 当链表长度 <6 时 调整成链表
  • 相关阅读:
    用KUSTO查询语句(KQL)在Azure Data Explorer Database上查询LOG实战
    Taurus.MVC WebMVC 入门开发教程3:数据绑定Model
    解决Mac下pycharm不提示element.click()方法
    保姆级教程 --redis启动命令
    python二级题库(百分之九十原题) 刷题软件推荐
    Kafka源码分析(四) - Server端-请求处理框架
    DW大学生网页作业制作设计 ——旅游门户网站(21页)HTML+CSS+JavaScript
    《bug记录》在利用TCP协议创建【服务器-客户端交互程序】中出现的一些问题
    day13_异常
    数据同步到Redis消息队列,并实现消息发布/订阅
  • 原文地址:https://blog.csdn.net/weixin_58778545/article/details/126305365