Java学习Day07集合

Java学习Day07集合List

List接口 Map接口以及常用子接口

在这里插入图片描述
ArrayList Vector LinkedList 三者都是List下的子类 都能调用List的方法

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Collection {
    @SuppressWarnings({"all"})//抑制警告数量
    public static void main(String[] args) {
        //集合主要分为2组 单列集合和双列集合
        //Collection 接口 List Set 他们的子类都是单列集合
        //List 有序 Set无序

        //Map 接口的实现 是双列集合 存放的是KV
        //new Arraylist().var
        ArrayList arrayList = new ArrayList();
        arrayList.add("jack");
        arrayList.add("tom");

        HashMap hashMap = new HashMap();
        hashMap.put("No1","A");
        hashMap.put("No2","B");
    }
    
}

ArrayList接口的一些方法

import java.util.List;
import java.util.ArrayList;
//类名不要和方法名重合
//重合调用方法需要java.util.ArrayList() 调用
public class ArrayListMethod {
    public static void main(String[] args) {
        List list = new ArrayList();
        //增加一个集合元素
        list.add("jack");
        list.add(10);
        list.add(true);
        //list.add(new Integer())不在是基本数据类型而是对象
        System.out.println("list= "+list);

        //list.remove(0);//删除第一个元素
        list.remove("jack");
        //list.remove(new Integer(10));//指定删除10
        list.remove(Integer.valueOf(10));//指定删除10,用这种方法上面的将要被淘汰
        //因为上面这种方法造成的性能浪费比较多
        //Java 11中已经弃用了new Byte()和new Integer(),应该是为了避免过多地创建对象。
        System.out.println("list= "+list);
        //检测是否含有元素 返回true或false
        System.out.println(list.contains(true));
        //检测集合元素个数
        System.out.println(list.size());
        //检测集合是否为空 
        System.out.println(list.isEmpty());

        //list.clear();将集合做空

        ArrayList list1 = new ArrayList();
        
        list1.add("A");
        list1.add("B");
        list.clear();
        list.addAll(list1);//在一个集合里增加另一个集合的所有元素
        System.out.println("list= "+list);
        //检查一个集合里是否包含另一个集合的所有元素
        System.out.println(list.containsAll(list1));
        //移除这个集合中的另一个集合的所有元素
        list.removeAll(list1);

        System.out.println("list= "+list);

    }
}

迭代器

import java.util.ArrayList;
import java.util.Collection;
public class Iterator {
    @SuppressWarnings({"all"})//减少警告
    public static void main(String[] args) {

        Collection col = new ArrayList();//必须调用上面两个包
        //父类引用指向子类
        col.add(new Book("三国演义","罗贯中",10));//增加集合元素
        col.add(new Book("红楼梦","曹雪芹",10));
        col.add(new Book("笑傲江湖","金庸",10));

        //System.out.println("col = "+col);
        //遍历
        //先得到集合的迭代器
        java.util.Iterator iterator = col.iterator();
        //while遍历
//        while(iterator.hasNext())//hasNext 判断是否有元素 返回true false
//        {   //编译类型是object 运行类型是真正的类型
//            Object object = iterator.next();
//            //返回元素类型是object
//            System.out.println("object = "+ object);
//        }
        //快捷键itit 显示所有快捷键 ctrl +j
        while (iterator.hasNext()) {
            Object object = iterator.next();
            System.out.println("object = "+ object);
        }
        //退出while循环后,这时iterator.next NoSuchElementException
        //iterator.next();
        //想要重新遍历 就需要重置迭代器
        iterator = col.iterator();
        while (iterator.hasNext()) {
            System.out.println("====================");
            Object next = iterator.next();
            System.out.println("object = "+ next);
        }

    }
    //调用 iterator.next(),要调用iterator.hasNext()检查元素是否存在
}

class Book{
    private String name;
    private String author;
    private double price;

    public Book(String name, String author, double price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

    public String getName() {
        return name;
    }

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

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}

Exercise 创建一个集合 并且输入至少三只狗的年龄名字并且两种方法遍历

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

public class CollectionExercise {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Dog("jack",1));
        list.add(new Dog("rose",3));
        list.add(new Dog("bob",2));
        //首先要读取到集合的迭代器
        java.util.Iterator iterator = list.iterator();

        while (iterator.hasNext()) {
            Object animal = iterator.next();
            System.out.println("animal "+animal);
        }
        System.out.println("================");
        for (Object o :list) {

            System.out.println("animal"+o);//实际上增强for也是迭代器 当你用debug force step into 就会发现for调用的iterator

        }
    }
}

class Dog{

    private String name;
    private int age;

    public Dog(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
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

List集合

public class List_ {
    public static void main(String[] args) {
        //List集合类中元素有序且可重复
        List list = new ArrayList();
        list.add("jack");
        list.add("jack");
        list.add("tom");
        list.add("rose");
        System.out.println(list);
        //List集合每个元素都像数组一样有索引从0开始
        System.out.println(list.get(3));

    }
}
import java.util.ArrayList;
import java.util.List;

public class ListMethod {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("bob");
        list.add("chen");
        //在索引=1的位置插入一个对象
        list.add(1,"mpp");
        System.out.println("list" +list);

        List list1 = new ArrayList();
        list1.add("jack");
        list1.add("tom");
        list.addAll(1,list1);//在索引1的位置插入list1集合
        System.out.println("list"+list);
        System.out.println(list.indexOf("tom"));//输出tom的索引
        list.add("mpp");
        System.out.println(list.lastIndexOf("mpp"));//输出最后一个mpp的索引
        list.remove(0);//移除list集合的0
        System.out.println(list);
        list.set(1,"marin");//将索引为1的元素设置为marin
        System.out.println(list);
        List returnlist =list.subList(0,2);//将list第一个第二个的元素赋给新的returnlist集合
        System.out.println(returnlist);//左闭右开的区间
    }
}

Exercise 给一个集合至少10元素,重命名第二,八个元素输出第6个元素移除第7个元素并遍历

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

public class ListExercise {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("tom");
        list.add("jerry");
        list.add("rose");
        list.add("steven");
        list.add("bob");
        list.add("lisa");
        list.add("tina");
        list.add("baby");
        list.add("flower");
        list.add("qute");
        list.add("mina");
        list.add("tom");
        list.set(1,"yuh");
        System.out.println(list.get(5));
        list.remove(6);
        list.set(7,"sar");

        java.util.Iterator iterator = list.iterator();//获取到这个集合的迭代器
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.print(" "+next);
        }

    }

}

ArrayListDetial

//ArrayList可以有null元素可以有多个null
//ArrayList有数组实现存储
//ArrayList基本等同于Vector,但ArrayList线程不安全
//当然它执行效率高 多线程时不建议用ArrayList 多线程用Vector
public class ArrayListSource {
//ArrayList维护了一个object数组
    //当创建ArrayList对象时,使用的无参构造器初始elementData容量是0,第一次添加时,扩容10后续扩容为1.5
    //指定了大小如果需要扩容直接扩容1.5 15这种奇数向下取整就是22
    //transient表示瞬间的短暂的 表示该属性不会被序列化
public static void main(String[] args) {

    ArrayList list = new ArrayList();
//        public ArrayList() {
//        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
//    }
    for (int i = 0; i <= 10; i++) {
        list.add(i);
    }
    for (int i = 0; i <=15; i++) {
        list.add(i);
    }
    list.add(100);
    list.add(200);
    list.add(null);
}
}

Exercise02 做一个图书目录 并以价格排序遍历

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

public class ListExercise02 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new book("三国演义","罗贯中",10));
        list.add(new book("红楼梦","曹雪芹",15));
        list.add(new book("西游记","施耐庵",9.5));
 //排序源代码 写在main方法里不美观        
//        List list1 =new ArrayList();
//        for (int i = 0; i < list.size(); i++) {
//            for (int j = 0; j < list.size()-i-1; j++) {
//                book book1 = (book)list.get(j);
//                book book2 = (book)list.get(j+1);
//
//                if (book1.getPrice()>book2.getPrice()) {
//                    list1.add(0,list.get(j));
//                    list.set(j,list.get(j+1));
//                    list.set(j+1,list1.get(0));
//
//                }
//
//            }
//        }
        sort(list);
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
        }

    }

    public static void sort(List list){

        List list1 =new ArrayList();
                for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.size()-i-1; j++) {
                book book1 = (book)list.get(j);
                book book2 = (book)list.get(j+1);

                if (book1.getPrice()>book2.getPrice()) {
                    list1.add(0,list.get(j));
                    list.set(j,list.get(j+1));
                    list.set(j+1,list1.get(0));
                    //这里也可以用 list.set(j,book2);
                    //list.set(j+1,book1);
                    //当然上面的中间量定义和赋值就不需要了
                }

            }
        }

    }
class book{
    private String name;
    private String author;
    private double price;

    public book(String name, String author, double price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

    public String getName() {
        return name;
    }

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

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}    

VectorDetail

import java.util.Vector;

public class VectorSource {
    //Vector
    // public class Vector<E>
    //    extends AbstractList<E>
    //    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
    //也是一个对象数组
    //线程同步 线程安全 操作方法都带有synchronized
    //开发中做线程同步安全,考虑Vector
    /*
    * ArrayList
    * 可变数组     jdk1.2     不安全 效率高   创建无参10 1.5被扩容
    *
    * Vector
    * 可变数组     jdk1.0     安全效率不高    创建无参10 2倍扩容
    * */
    public static void main(String[] args) {

        Vector vector = new Vector();
        for (int i = 0; i < 10; i++) {
            vector.add(i);
        }
        vector.add(100);
//创建容量
//            public Vector() {
//            this(10);
//        }
//给Vector赋值
//        public synchronized boolean add(E e) {
//            modCount++;
//            add(e, elementData, elementCount);
//            return true;
//        }

    }
}

LinkedList

public class LinkedListMethod {
    //LinkedList底层实现双向列表 双端队列
    //可以添加任意元素 并且可以重复 包括null
    //线程不安全 没有实现重复
    //first last 分别指向首节点和尾节点 每一个节点node维护了prev next item 三个属性
    //prev指向前一个 next指向后一个实现双向链表
    //所有LinkedList添加和删除不是通过数组完成 相对效率较高
    public static void main(String[] args) {
        //模拟简单的双向链表
        Node jack = new Node("jack");
        Node tom = new Node("tom");
        Node yuh = new Node("yuh");
        //连接三个节点
        jack.next = tom;
        tom.next = yuh;
        yuh.prev = tom;
        tom.prev = jack;
        //现在就形成了双向链表
        Node first = jack;//双向链表的首节点
        Node last = yuh;//双向链表的尾节点
        //从头到尾遍历
        while(true){
            if (first == null){
                break;
            }
            System.out.println(first);
            first = first.next;
        }
        //从尾到头遍历
        System.out.println("==========");
        while(true){
            if (last == null){
                break;
            }
            System.out.println(last);
            last = last.prev;
        }
        System.out.println("============");
        //添加元素方便 在tom和yuh插入simth
        Node smith = new Node("smith");

        tom.next = smith;
        yuh.prev = smith;
        smith.next = yuh;
        smith.prev = tom;
        first = jack;
        while(true){
            if (first == null){
                break;
            }
            System.out.println(first);
            first = first.next;
        }

    }
}
class Node{
    public Object item;
    public Node next;
    public Node prev;
    public Node(Object name){
        this.item=name;
    }

    @Override
    public String toString() {
        return "Node name{" +
                "item=" + item +
                '}';
    }
}

LinkedListCRUD

import java.util.LinkedList;

//CRUD增删改查
public class LinkedListCRUD {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        LinkedList linkedList = new LinkedList();
//            public LinkedList() {
//        }
        //这时linkedList last first 都是null
        linkedList.add(1);
        linkedList.add(2);
        //执行add方法
        //    public boolean add(E e) {
        //        linkLast(e);
        //        return true;
        //    }
//        void linkLast(E e) {
//            final LinkedList.Node<E> l = last;
//            final LinkedList.Node<E> newNode = new LinkedList.Node<>(l, e, null);
//            last = newNode;
//            if (l == null)
//                first = newNode;
//            else
//                l.next = newNode;
//            size++;
//            modCount++;
//        }
        System.out.println(linkedList);
        linkedList.remove();//默认删除第一个
//    private E unlinkFirst(Node<E> f) {
//        // assert f == first && f != null;
//        final E element = f.item;
//        final Node<E> next = f.next;
//        f.item = null;
//        f.next = null; // help GC
//        first = next;
//        if (next == null)
//            last = null;
//        else
//            next.prev = null;
//        size--;
//        modCount++;
//        return element;
//    }
        System.out.println(linkedList);

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值