当前位置:   article > 正文

List集合的练习_list不存在新建

list不存在新建

List子集

List子集的特点

ArrayList

  • 底层结构是数组,查询快,增删慢
  • 线程不是安全的,效率高

ArrayList存储字符串并遍历代码举例:

  1. ArrayList arr = new ArrayList();
  2. arr.add("hello");
  3. arr.add("world");
  4. arr.add("java");
  5. //遍历
  6. Iterator iterator = arr.iterator();
  7. while (iterator.hasNext()){
  8. Object next = iterator.next();
  9. String next1 = (String) next;
  10. System.out.println(next1);
  11. }
  12. System.out.println("*************");
  13. for(int i=0;i<arr.size();i++){
  14. Object o = arr.get(i);
  15. String o1 = (String) o;
  16. System.out.println(o1);
  17. }
  18. }
  19. }
  20. //hello
  21. //world
  22. //java
  23. //*************
  24. //hello
  25. //world
  26. //java

ArrayList存储自定义对象并遍历,代码举例:

  1. public static void main(String[] args) {
  2. ArrayList list = new ArrayList();
  3. Student s1 = new Student("张三", 21);
  4. Student s2 = new Student("李四", 22);
  5. Student s3 = new Student("王五", 23);
  6. list.add(s1);
  7. list.add(s2);
  8. list.add(s3);
  9. Iterator iterator = list.iterator();
  10. while (iterator.hasNext()){
  11. Object next = iterator.next();
  12. Student next1 = (Student) next;
  13. System.out.println(next1.getName()+"---"+next1.getAge());
  14. }
  15. System.out.println("****************");
  16. for(int i=0;i<list.size();i++){
  17. Object o = list.get(i);
  18. Student o1 = (Student) o;
  19. System.out.println(o1.getName()+"---"+o1.getAge());
  20. }
  21. }
  22. }
  23. //张三---21
  24. //李四---22
  25. //王五---23
  26. //****************
  27. //张三---21
  28. //李四---22
  29. //王五---23

使用ArrayList去除集合中字符串的重复值(字符串的内容相同)

方式一:在不同的集合上操作

  1. public static void main(String[] args) {
  2. //创建一个集合对象,添加元素
  3. //创建一个新的集合对象
  4. //遍历旧的集合对象,获取到每个元素
  5. //拿新的集合去找,看有没有,没有就加进去,有,就跳过
  6. //遍历新的集合
  7. ArrayList list = new ArrayList();
  8. list.add("hello");
  9. list.add("world");
  10. list.add("java");
  11. list.add("hello");
  12. ArrayList new_list = new ArrayList();
  13. //遍历旧的集合
  14. Iterator iterator = list.iterator();
  15. System.out.println("原来的集合:");
  16. while (iterator.hasNext()){
  17. Object next = iterator.next();
  18. String next1 = (String) next;
  19. System.out.println(next1);
  20. if(!new_list.contains(next1)){
  21. new_list.add(next1);
  22. }
  23. }
  24. System.out.println("去除集合中字符串的重复值之后的集合:");
  25. //遍历新的集合
  26. Iterator iterator1 = new_list.iterator();
  27. while (iterator1.hasNext()){
  28. Object next = iterator1.next();
  29. String next1 = (String) next;
  30. System.out.println(next1);
  31. }

方式二:在同一个集合上操作

  1. public static void main(String[] args) {
  2. ArrayList list = new ArrayList();
  3. list.add("hello");
  4. list.add("world");
  5. list.add("spark");
  6. list.add("world");
  7. list.add("hello");
  8. list.add("spark");
  9. list.add("hello");
  10. //利用选择排序的思想
  11. for(int i=0;i<list.size();i++){
  12. for(int j=i+1;j<list.size();j++){
  13. if(list.get(i).equals(list.get(j))){
  14. list.remove(j);
  15. j--;
  16. }
  17. }
  18. }
  19. Iterator iterator = list.iterator();
  20. while (iterator.hasNext()){
  21. Object next = iterator.next();
  22. String next1 = (String) next;
  23. System.out.println(next1);
  24. }
  25. }
  26. }
  27. //hello
  28. //world
  29. //spark

使用ArrayList去除自定义类中的重复值

  1. class Student{
  2. private String name;
  3. private int age;
  4. Student(){}
  5. Student(String name,int age){
  6. this.name = name;
  7. this.age = age;
  8. }
  9. public String getName() {
  10. return name;
  11. }
  12. public void setName(String name) {
  13. this.name = name;
  14. }
  15. public int getAge() {
  16. return age;
  17. }
  18. public void setAge(int age) {
  19. this.age = age;
  20. }
  21. }
  22. public class ArrayListDemo5 {
  23. public static void main(String[] args) {
  24. ArrayList list = new ArrayList();
  25. Student s1 = new Student("张三",21);
  26. Student s2 = new Student("李四",22);
  27. Student s3 = new Student("王五",23);
  28. Student s4 = new Student("张三",21);
  29. list.add(s1);
  30. list.add(s2);
  31. list.add(s3);
  32. list.add(s4);
  33. //创建新的集合
  34. ArrayList list1 = new ArrayList();
  35. Iterator iterator = list.iterator();
  36. while (iterator.hasNext()){
  37. Object next = iterator.next();
  38. Student next1 = (Student) next;
  39. if(!list1.contains(next1)){
  40. list1.add(next1);
  41. }
  42. }
  43. Iterator iterator1 = list1.iterator();
  44. while (iterator1.hasNext()){
  45. Object next = iterator1.next();
  46. Student next1 = (Student) next;
  47. System.out.println(next1.getName()+"---"+next1.getAge());
  48. }
  49. }
  50. }
  51. //张三---21
  52. //李四---22
  53. //王五---23
  54. //张三---21

但这里我们发现一个问题,我们按照规定的思维,发现并没有去除重复的元素
通过查看源码我们发现,contain()的方法底层依赖的是equals()方法,由于我们的Student1类中并没有重写equals()方法,所以它默认调用的是父亲Object的equals()方法,而父亲的equals()方法比较的是地址值,每个学生对象被new出来的时候,地址值是一定不同的,所以比较地址值都是true,所以结果没有生效。

解决办法:
    重写equals方法,不需要我们重写,自动生效即可
建议:
    每次创建类的时候,都重写一些equals方法

LinkedList:
底层结构是链表,查询慢,增删快
线程是不安全的,效率高
LinkedList的特有功能
添加功能
void addFirst(E e) 在该列表开头插入指定元素
void addLast(E e) 将指定的元素追加到此列表的末尾
获取参数
E getFirst() 返回此列表中的第一个元素
E getLast() 返回此列表中的最后一个元素
删除功能
E removeFirst() 从此列表中删除并返回第一个元素
E removeLast() 从此列表中删除并返回最后一个元素

Vector:
底层结构是数组,查询快,增删慢
线程是安全的,效率低
Vector的特有功能
添加功能
void addElement(Object object)将指定组件添加到此向量的末尾,将其大小增加1

获取功能
Object elementAt(int index) 返回指定索引处的元素 --get()
Enumeration elements() 返回此向量的组件的容器。–list.iterator()
boolean hasMoreElements() 测试此容器是否包含更多元素。 --hasNext()
E nextElement() 如果此容器对象至少有一个要提供的元素,则返回此容器的下一个元素。–next()
代码举例:

  1. public static void main(String[] args) {
  2. Vector vector = new Vector();
  3. vector.addElement("hello");
  4. vector.addElement("world");
  5. vector.addElement("java");
  6. Enumeration elements = vector.elements();
  7. while (elements.hasMoreElements()){
  8. Object o = elements.nextElement();
  9. String o1 = (String) o;
  10. System.out.println(o1);
  11. }
  12. }
  13. }
  14. //hello
  15. //world
  16. //java

List子类面试题(List子类的特点)
ArrayList:
底层是数组,查询快,增删慢
线程不是安全的,效率高
Vector:
底层结构是数组,查询快,增删慢
线程是安全的,效率低
LinkedList:
底层结构是链表,查询慢,增删块
线程不是安全的,效率高
实际应用的时候,看实际需求:
需要线程安全:
Vector
不需要:ArrayList、Linkedlist
查询业务比较多:ArrayList
增删业务比较多:LinkedList
不知道选什么:ArrayList
感谢观看,我是酷酷的涛!!!

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号