• 《熟悉List集合》第一弹


    目录

    1.List集合的增删改查

    2.List集合的三种遍历方式

    3.Linkedlist 中堆栈及队列

    4.List集合去重

    5.List集合增长因子论证、List集合如何去优化 


    1.List集合的增删改查

    1. package com.jmh.list;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. /**
    5. * list集合的增删改查
    6. * @author 蒋明辉
    7. *
    8. */
    9. public class Demo01 {
    10. public static void main(String[] args) {
    11. //创建一个list集合
    12. List<String> list=new ArrayList<>();
    13. //给集合里面增加值
    14. list.add("zs");
    15. list.add("li");
    16. list.add("we");
    17. list.add("ll");
    18. list.add("lj");
    19. //输出
    20. System.out.println("增加后="+list);
    21. //修改
    22. list.set(0, "张三");
    23. System.out.println("修改后="+list);
    24. //删除
    25. String remove = list.remove(1);
    26. System.out.println("根据下标被删除的内容"+remove);
    27. System.out.println("删除后="+list);
    28. }
    29. }

    测试如下

     

    2.List集合的三种遍历方式

    1. package com.jmh.list;
    2. import java.util.ArrayList;
    3. import java.util.Iterator;
    4. import java.util.List;
    5. /**
    6. * list集合的三种遍历方式
    7. * @author 蒋明辉
    8. *
    9. */
    10. public class Demo02 {
    11. public static void main(String[] args) {
    12. //创建一个list集合
    13. List<String> list=new ArrayList<>();
    14. //给集合里面增加值
    15. list.add("zs");
    16. list.add("li");
    17. list.add("we");
    18. list.add("ll");
    19. list.add("lj");
    20. //第一种方式:for循环输出
    21. for (int i = 0; i < list.size(); i++) {
    22. System.out.println("使用for循环输出==="+list.get(i));
    23. }
    24. //第二种方式:for循环加强方式输出
    25. for (String str : list) {
    26. System.out.println("使用for循环加强输出==="+str);
    27. }
    28. //第三种方式:Iterator迭代器输出
    29. Iterator<String> iterator = list.iterator();
    30. //判断是否有下一个值
    31. while(iterator.hasNext()) {//代表有就执行下一步
    32. System.out.println("迭代器输出==="+iterator.next());//输出
    33. }
    34. }
    35. }

    测试如下

     

     

    3.Linkedlist 中堆栈及队列

    •   堆栈特点:先进后出
    •   队列特点:先进先出 
    1. package com.jmh.list;
    2. import java.util.LinkedList;
    3. /**
    4. * Linkedlist
    5. * 1.Linkedlist和ArrayList的区别
    6. * linkedlist的底层是链表
    7. * ArrayList底层是数组
    8. * 2.堆栈特点:先进后出
    9. * 3.队列特点:先进先出
    10. * @author 蒋明辉
    11. *
    12. */
    13. public class Demo03 {
    14. public static void main(String[] args) {
    15. //开始测试 队列
    16. duilie dl=new duilie(new LinkedList<>());
    17. //调用增加的方法
    18. dl.push("zs");
    19. dl.push("ls");
    20. dl.push("we");
    21. dl.push("mz");
    22. //开始取出
    23. System.out.println("========队列特点:先进先出========");
    24. System.out.println(dl.pop());
    25. System.out.println(dl.pop());
    26. System.out.println(dl.pop());
    27. System.out.println(dl.pop());
    28. //开始测试 堆栈
    29. duizhan dz=new duizhan(new LinkedList<>());
    30. //调用增加的方法
    31. dz.push("zs1");
    32. dz.push("ls1");
    33. dz.push("we1");
    34. dz.push("mz1");
    35. //开始取出
    36. System.out.println("========堆栈特点:先进后出========");
    37. System.out.println(dz.pop());
    38. System.out.println(dz.pop());
    39. System.out.println(dz.pop());
    40. System.out.println(dz.pop());
    41. }
    42. }
    43. //创建一个队列类
    44. class duilie{
    45. private LinkedList<String> list;
    46. //增加元素的方法
    47. public void push(String list) {
    48. this.list.add(list);
    49. }
    50. //移除元素的方法(取出/出去)
    51. public String pop() {
    52. return this.list.remove();
    53. }
    54. public LinkedList<String> getList() {
    55. return list;
    56. }
    57. public void setList(LinkedList<String> list) {
    58. this.list = list;
    59. }
    60. public duilie(LinkedList<String> list) {
    61. super();
    62. this.list = list;
    63. }
    64. @Override
    65. public String toString() {
    66. return "duilie [list=" + list + "]";
    67. }
    68. public duilie() {
    69. }
    70. }
    71. //创建一个堆栈类
    72. class duizhan{
    73. private LinkedList<String> list;
    74. //增加元素的方法
    75. public void push(String list) {
    76. this.list.add(list);
    77. }
    78. //移除元素的方法(取出/出去)
    79. public String pop() {
    80. return this.list.removeLast();//从最后一个开始取出即可(删除的对象)
    81. }
    82. public LinkedList<String> getList() {
    83. return list;
    84. }
    85. public void setList(LinkedList<String> list) {
    86. this.list = list;
    87. }
    88. public duizhan(LinkedList<String> list) {
    89. super();
    90. this.list = list;
    91. }
    92. @Override
    93. public String toString() {
    94. return "duilie [list=" + list + "]";
    95. }
    96. public duizhan() {
    97. super();
    98. }
    99. }

     测试如下

     

    4.List集合去重

    1. package com.jmh.list;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. /**
    5. * List集合重复元素去重
    6. * 1.底层是是重写eq方法来执行去重元素
    7. * @author 蒋明辉
    8. *
    9. */
    10. public class Demo04 {
    11. public static void main(String[] args) {
    12. //案例一 创建集合 增加五个元素 要求去重并且只输出去重后的元素
    13. List<String> list=new ArrayList<>();
    14. //新增一个集合 来保存去重后的元素
    15. List<String> oldList=new ArrayList<>();
    16. //开始增加
    17. list.add("张三");
    18. list.add("李四");
    19. list.add("王二");
    20. list.add("张三");
    21. System.out.println("去重前"+list);
    22. //开始去重
    23. //遍历老集合
    24. for (String string : list) {
    25. //判断如果新集合不包含老集合的元素就增加到新集合
    26. if(!oldList.contains(string)) {
    27. oldList.add(string);
    28. }
    29. }
    30. System.out.println("去重后"+oldList);
    31. }
    32. }

    测试如下

     

     

    5.List集合增长因子论证、List集合如何去优化 

    1. package com.jmh.list;
    2. import java.lang.reflect.Field;
    3. import java.util.ArrayList;
    4. /**
    5. * List增长因子论证、List集合如何去优化
    6. * 1.list集合底层是数组
    7. * 疑惑点:数组的长度是不可变的、可list集合能无限制的添加元素
    8. * 2.list集合底层数组的初始化容量是10、增长因子是0.5
    9. * 针对上面的疑惑:数组容量达到上限会进行扩容
    10. * 3.list集合进行优化、只需要扩大初始化容量、减少扩容的次数、进一步提到性能
    11. * 有意识的设置初始化容量
    12. * @author 蒋明辉
    13. *
    14. */
    15. public class Demo05 {
    16. public static void main(String[] args) throws Exception, SecurityException {
    17. //创建一个集合
    18. ArrayList<Integer> arr=new ArrayList<>();
    19. //循环增加100次
    20. for (int i = 0; i < 50; i++) {
    21. arr.add(i);
    22. getElementDataLength(arr);
    23. }
    24. }
    25. private static void getElementDataLength(ArrayList<Integer> arr) throws Exception, SecurityException {
    26. //拿到List集合属性对象
    27. Field f = arr.getClass().getDeclaredField("elementData");
    28. //打开属性的设置权限
    29. f.setAccessible(true);
    30. //拿到数组对象
    31. Object[] ob = (Object[])f.get(arr);
    32. //测试
    33. System.out.println("此时容器中的元素个数:"+arr.size()+"此时容器中的元素大小:"+ob.length);
    34. }
    35. }

     测试如下


     

     

     

     

     

  • 相关阅读:
    1.1 熟悉x64dbg调试器
    Qt中定时器的3种实现方法
    统一网关Gateway
    面试软件测试工程师时可能会遇到的几个常见问题
    QT项目:网络聊天室
    MobTech ShareSDK 后台配置说明
    Vue简介&入门&Vue事件&生命周期
    电脑监控软件内网版和外网版哪个好?
    Pr:与 Ps、Ae、Au 的协同编辑
    一文讲清楚Java面向对象的继承关系
  • 原文地址:https://blog.csdn.net/m0_63300795/article/details/125432486