JAVA复习5(集合——ArrayList)

  • 集合

 

所谓集合指的就是一套动态对象数组,在实际开发中数组的概念的一定会使用的,但是数组的问题是一旦开辟空间则长度不可改变

 

 

其实就是对数据结构的一种封装,用户不用去编写,直接使用。 由于数据结构开发起来比较困难,还必须考虑性能问题

 

 

 

3.1 集合中需要掌握的核心接口

 

Collection  List  Set  Map  Iterator   (了解) Enumeration  Queue

 

 

3.2 List接口

 

List接口的定义:

public interface List<E> extends Collection<E>

 

通过观察List接口的定义其继承的是Collection 接口

通过观察接口之间的关系,可以得出上图

 

观察Collection常用方法

 

1 public  boolean add(E e);    增加元素到集合

 

2 public boolean addAll(Collection<? extends E> c) 存放一个集合

 

3 public boolean contains(Object o) 查找集合中的元素

 

4 public boolean isEmpty() 判断一个集合是否为空

 

5 public boolean remove(Object o) 删除一个集合中的元素

 

6 public int size(); 返回集合中的长度

 

观察List接口中的方法

 

List扩展Collection中的方法

1public E get(int index) 根据指定索引取得元素

 

2 public E set(int index, E element) ;  替换元素, index要替换元素下标  element要替换的元素

 

3 public ListIterator<E> listIterator() List自己的迭代器

 

List接口的特点: 可重复的, 有序的

 

使用List list本身是一个接口,如果想要使用一个接口则可以使用该接口的实现类完成

List下面的实现类:

 

需要掌握的实现类 ArrayList   LindkedList  Vector

 

范例: 使用List 接口

     public static void main(String[] args) {

          // 泛型的使用中 只能使用类 基本数据类型不行

         

          List<Integer> array=new ArrayList<>();

         

          array.add(4);  //赋值

         

          array.add(3);

         

          array.add(3);

         

          array.add(1);

         

         

          for(int i=0;i<array.size();i++) {

              

               System.out.println(array.get(i));  //通过get取值

          }

     }

通过使用ArrayList发现 其特点是 可重复的,并且有序的,顺序就存储时候的顺序

通过一个 add 增加元素到集合   通过get(index) 取出集合中的元素  下标的位置从0开始

 

观察其中的一些其他的操作方法:

 

1 判断集合是否为空  pulic boolean isEmpty();

 

2 取得集合中的长度 pulic int size();

 

3 删除集合中的元素 public boolean remove(Object obj);

 

public static void main(String[] args) {

          // 泛型的使用中 只能使用类 基本数据类型不行

         

          List<Integer> array=new ArrayList<>();

         

         

          System.out.println("&&&&&"+array.isEmpty());

         

          array.add(4);  //赋值

         

          array.add(3);

         

          array.add(3);

         

          System.out.println(array.remove(1));

          array.add(1);

          System.out.println(array.isEmpty());

         

          System.out.println(array);

     }

 

通过观察源码发现ArrayList 是一个对象数组 每次增加的时候 会为数组扩容,数组长度是不能改变的,每次扩容数组内容拷贝的工作 ArrayList如果频繁增加内容,效率不高, 但是查询的时候由于底层使用的是数组,所以查询效率会高

 

面试题:

 

 

ArrayList保存自定义类:

 

首先观察使用系统自定义的类完成ArrayList类的添加

public static void main(String[] args) {

          // 泛型的使用中 只能使用类 基本数据类型不行

         

          List<String> array=new ArrayList<>();

         

          array.add("A");

         

          array.add("B");

         

          array.add("C");

         

          System.out.println(array.contains("C"));

          for(String s:array) {

              

               System.out.println(s);

          }

         

     }

 

以上使用的类 为系统自定义的String 其类功能已经非常完善了,现在使用用户自定义的类完成ArrayList的添加

范例:实现自定义类

package org.list;

 

public class Person {

 

     private String name;

    

     private int age;

    

     public Person(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;

     }

 

     @Override            //new Person("张三",20)

     public boolean equals(Object obj) {    // 传进来要比较的内容

          // TODO Auto-generated method stub

         

          Person per=null;  

          if(obj instanceof Person) {

              

               per=(Person)obj// Object 向下转型 为 Person类型

          }

          // this 当前的对象 Person  和 传进来的Person比较

          if(this==per) {  //内存地址 一样肯定是同样对象

              

               return true;

          }

         

          if(this.age==per.age&&this.name.equals(per.name)) {

              

               return true;

          }

         

          return false;

     }

    

    

    

}

 

 

通过代码,发现自定义类的时候,必须覆写equals方法才能完成集合中 对象查找和删除,主要原因是在于进行对象删除或者查找的时候 集合中会判断传入的元素和集合本身的元素是否是内容相同的元素 只有相同才会删除或者查找

猜你喜欢

转载自blog.csdn.net/weixin_42923199/article/details/86673753