Java集合-List接口

Collection接口:单列集合,用来存储一个一个的对象
* 子接口List:存储有序的、可重复的数据 “动态”数组
* ArrayList:作为List接口的主要实现类,线程不安全的,效率高;底层使用Object[]存储
* LinkedList:对于频繁地插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
* Vector:古老的List实现类;线程安全的,效率较低;底层使用Object[]存储
* List(动态数组)

ArrayList、LinkedList、Vector的异同?
* 同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据
* 异:
* ArrayList:作为List接口的主要实现类,线程不安全的,效率高;底层使用Object[]存储
* LinkedList:对于频繁地插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
* Vector:古老的List实现类;线程安全的,效率较低;底层使用Object[]存储



* List接口中常用方法
* 加索引
*void add(int index, Object obj):在index位置插入元素obj
*boolean addAll(int index, Collection c):在index位置开始,将集合c中的所有元素添加到当前集合
*get(int index):获取指定index位置的元素
*int indexOf(Object o):返回o在集合中首次出现的位置
* int lastIndexOf(Object o):返回o在集合中最后出现的位置
*Object remove(int index):移除指定index位置的元素,并返回此元素
*Object set(int index, Object obj):设置指定index位置的元素为obj
* List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集和(左闭右开)
*
*
*
* 常用方法:
* 增:add(Object obj)
* 删:remove(int index)/remove(Object obj)
* 改:set(int index, Object obj)
* 查:get(int index)
* 插: add(int index, Object obj)
* 长度:size()
* 遍历:①Iterator迭代器
* ②foreach(增强for循环)
* ③普通for循环


import org.junit.Test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *  Collection接口:单列集合,用来存储一个一个的对象
 *      子接口List:存储有序的、可重复的数据    “动态”数组
 *              ArrayList:作为List接口的主要实现类,线程不安全的,效率高;底层使用Object[]存储
 *              LinkedList:对于频繁地插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
 *              Vector:古老的List实现类;线程安全的,效率较低;底层使用Object[]存储
 * List(动态数组)
 *
 *
 * @author orz
 */
public class ListTest {

    /**
     * ArrayList、LinkedList、Vector的异同?
     * 同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据
     * 异:
     *     ArrayList:作为List接口的主要实现类,线程不安全的,效率高;底层使用Object[]存储
     *     LinkedList:对于频繁地插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
     *     Vector:古老的List实现类;线程安全的,效率较低;底层使用Object[]存储
     */


    /**
     * List接口中常用方法
     * 加索引
     *void add(int index, Object obj):在index位置插入元素obj
     *boolean addAll(int index, Collection c):在index位置开始,将集合c中的所有元素添加到当前集合
     *get(int index):获取指定index位置的元素
     *int indexOf(Object o):返回o在集合中首次出现的位置
     * int lastIndexOf(Object o):返回o在集合中最后出现的位置
     *Object remove(int index):移除指定index位置的元素,并返回此元素
     *Object set(int index, Object obj):设置指定index位置的元素为obj
     * List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集和(左闭右开)
     *
     *
     *
     * 常用方法:
     * 增:add(Object obj)
     * 删:remove(int index)/remove(Object obj)
     * 改:set(int index, Object obj)
     * 查:get(int index)
     * 插: add(int index, Object obj)
     * 长度:size()
     * 遍历:①Iterator迭代器
     *      ②foreach(增强for循环)
     *      ③普通for循环
     *
     */
    @Test
    public void test1()
    {

        ArrayList list = new ArrayList();
        list.add("hello");
        list.add("AA");
        list.add(123);
        list.add(new Person(21,"tom"));

        System.out.println(list);

        list.add(1,"BB");
        System.out.println(list);

        System.out.println("**********");
        ArrayList list1 = new ArrayList();
        list1.add("Jack");
        list1.add("Cat");
        System.out.println(list1);
        list1.addAll(1,list);
        System.out.println(list1);


        System.out.println("***********");
        System.out.println(list);
        System.out.println(list.get(1));

        System.out.println("*************");
        System.out.println(list);
        System.out.println(list.indexOf("AA"));

        System.out.println("*************");
        list.add("AA");
        System.out.println(list);
        System.out.println(list.lastIndexOf("AA"));


        System.out.println("**********");
        System.out.println(list);
        Object remove = list.remove(1);
        System.out.println(remove);
        System.out.println(list);

        System.out.println("**********");
        System.out.println(list);
        Object man = list.set(1, "Man");
        System.out.println(list);

        System.out.println("******");
        List list2 = list.subList(1, 3);
        System.out.println(list);
        System.out.println(list2);


    }


    /**
     * List遍历
     */
    @Test
    public void test2()
    {
        ArrayList list = new ArrayList();
        list.add("hello");
        list.add("AA");
        list.add(123);
        list.add(new Person(21,"tom"));



        // ①Iterator迭代器
        Iterator iterator = list.iterator();
        while (iterator.hasNext())
        {
            System.out.println(iterator.next());
        }

        // ②foreach(增强for循环)
        System.out.println();
        for (Object obj:list)
        {
            System.out.println(obj);
        }
        // ③普通for循环
        System.out.println();
        for (int i = 0; i <list.size() ; i++) {
            System.out.println(list.get(i));
        }

    }

    /**
     * 面试题
     */

    @Test
    public void test3()
    {
        List list=new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println(list);
        updateList(list);
        System.out.println(list);
        updateList2(list);
        System.out.println(list);

    }
    private static void updateList(List list)
    {
        list.remove(2);
    }
    private static void updateList2(List list)
    {
        list.remove((Integer) 2);
    }

}

 

import java.util.Objects;

public class Person implements Comparable{

    private int age;
    private String name;

    public Person() {
    }

    public Person(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }

    //按照姓名从小到大排序,年龄从小到大

   @Override
   public int compareTo(Object o)
   {
       if(o instanceof Person)
       {
           Person person=(Person)o;
          // return this.name.compareTo(person.name);
           int compare=this.name.compareTo(person.name);
           if(compare!=0)
           {
               return compare;
           }
           else
           {
               return Integer.compare(this.age,person.age);
           }

       }
       else
       {
           throw new RuntimeException("输入的类型不匹配");
       }
   }
}

 

posted @ 2020-08-10 22:33  orz江小鱼  阅读(126)  评论(0编辑  收藏  举报