三十二、Java基础之List集合

一、list相关方法演示

public class Test01 {

    public static void main(String[] args){

        //1、创建list集合
        List<String> list = new ArrayList<>();
        //2、新增元素
         list.add("gg");
         list.add("jj");
         list.add("dd");
         list.add("mm");
         list.add("jj");

         //3、直接打印
        System.out.println(list);

        //4、在指定索引值位置添加,注意索引值越界
        list.add(0,"MM");
        list.add(list.size(),"DD");
        System.out.println(list);

        //5、删除指定位置的元素
        list.remove(0);
        System.out.println(list);
        list.remove(list.size()-1);

        //6、返回指定位置的元素
        System.out.println(list.get(0));
        System.out.println(list.get(list.size()-1));

        //7、修改指定位置的元素,并没有生成新的List列表,而是返回原有列表的一个视图
        System.out.println(list);
        list.set(0,"KK");
        System.out.println(list);//[KK, jj, dd]

        //8、返回指定范围的子列表
        List<String> sublist = list.subList(0,3);
        System.out.println(sublist);
        //修改自列表sublist
        sublist.add("DD");
        sublist.set(0,"ee");
        System.out.println(sublist);//[ee, jj, dd, DD]

        //对sublist的修改实际上是对list的修改
        System.out.println(list);//[ee, jj, dd, DD, mm, jj]

        //9、返回元素第一次出现的位置
        System.out.println(list.indexOf("jj"));//1
        System.out.println(list.lastIndexOf("jj"));//5

        //10、ListIterator迭代器
        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()){
            String string =(String) listIterator.next();
            System.out.print(string + "\t");

        }
        System.out.println();

        //ListIterator还可以向前迭代,经过上个while循环后,listIterator游标指向最后一个
        while (listIterator.hasPrevious()){
            String str=listIterator.previous();
            System.out.print(str+"\t");
        }
        System.out.println();

        //ListIterator不仅可以删除元素,还可以修改/添加元素  [ee, jj, dd, DD, mm, jj]
        while (listIterator.hasNext()) {
            String string = (String)listIterator.next();
            if (string.equals("mm")){
                listIterator.remove();
            }else if(string.equals("jj")){
                listIterator.add("jjj");
            }else if (string.equals("DD")){
                listIterator.set("DDD");
            }

        }
        System.out.println(list);  //[ee, jj, jjj, dd, DDD, jj, jjj]


    }
}

二、List集合存储自定义类型数据

public class Person {

    String name;
    int age;

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

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

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

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

    public static void main(String[] args){

        //创建List集合,存储Person对象
        List<Person> list = new ArrayList<>();

        //添加元素
        list.add(new Person("lisi",18));
        list.add(new Person("wangwu",22));
        list.add(new Person("zhangyu",126));
        list.add(new Person("gouzi",23));

        System.out.println(list);//[Person{name='lisi', age=18}, Person{name='wangwu', age=22}, Person{name='zhangyu', age=126}, Person{name='gouzi', age=23}]

        Person wangwu = new Person("wangwu",22);
        System.out.println(list.contains(wangwu));//true
        list.remove(wangwu);
        System.out.println(list);//[Person{name='lisi', age=18}, Person{name='zhangyu', age=126}, Person{name='gouzi', age=23}]



    }


}

三、List排序

public class Test03 {

    public static void main(String[] args){

        //创建List集合,存储Person对象
        List<Person> list = new ArrayList<>();

        //添加元素
        list.add(new Person("lisi",18));
        list.add(new Person("wangwu",22));
        list.add(new Person("zhangyu",126));
        list.add(new Person("gouzi",23));

        System.out.println(list);

        //对List集合中的元素排序,想要对list集合中的Person按照年龄降序排列,
        list.sort(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                //在compare方法中指定比较规则,按照年龄降序
                //return o2.age-o1.age;//如果o1的年龄大返回负数,o2的年龄大返回正数-降序
                return o1.age-o2.age;//如果o1的年龄大返回正数,o2的年龄大返回负数-升序
            }
        });
        System.out.println(list);

        //按照name首字母排序
        list.sort(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                //return o1.name.compareTo(o2.name);//姓名升序
                return o2.name.compareTo(o1.name);//姓名降序
            }
        });
        System.out.println(list);
    }
}

四、ArrayList 和 Vector

/**
 * 1。ArrayList  和  Vector底层都是数组
 * 2。ArrayList  和  Vector默认初始化容量都是10
 * 3。ArrayList 扩容1。5倍 和  Vector扩容2倍
 * 4。Vector提供的方法都使用了synchronized修饰,是线程安全的
 *      ArrayList不是线程安全的
 * 
 * 创建日期:2019-06-30-16:33
 */

五、单项链表,双向链表,LinkedList

/**
 * 创建日期:2019-06-30-17:01
 *
 *
 * 单项链表:
 *
 * 双向链表:
 *      优点:添加和删除元素时,只需要修改一下节点的next/prev指针域即可
 *
 *      缺点:每次访问,要么从头节点开始,要么从尾节点开始顺序查找
 *
 *      与单项链表相比:不仅可以访问某个结点的next后继,还可以访问某个节点的prev前驱
 *
 *
 *
 *LinkedList新增方法:
 *      主要增加了针对头结点与尾结点进行操作的方法,即针对第一个元素和最后一个元素进行操作的方法
 *
 *    addFirst(E e):  添加到头部
 *    addLast(E e):   添加到尾部
 *    element():  返回第一个元素
 *    getFirst():返回第一个元素
 *    removeFirst()返回最后一个元素
 *
 *    boolean offer(E e):把元素添加到尾部
 *    boolean offerFirst(E e):添加到头部
 *    boolean offerLast(E e):添加到尾部
 *
 *    peek():返回第一个元素
 *    peekFirst():返回第一个元素
 *    peekLast():返回最后一个元素
 *
 *    poll():删除第一个元素并返回
 *    pollFirst():删除第一个元素并返回
 *    pollLast():删除最后一个元素并返回
 *
 *    pop(): 删除第一个元素并返回
 *    push():在头部添加元素

 *    removeFirst()删除第一个元素并返回
 *    removeLast()删除最后一个元素并返回
 *    push()/pop()模拟栈,栈特点是先进后出,后进先出
 *    offer()/poll()模拟队列,队列的特点是先进先出
 *
 *
 *
 */

 

posted @ 2019-06-30 17:40  旅行没有终点  阅读(239)  评论(0编辑  收藏  举报