集合框架之list

首先让我们通过一个思维导图了解今天的大致内容

集合框架之list_第1张图片

导向

目录

1,UML

2,list集合的增删改查

3,List集合的三种遍历方式 

4,LinkedList实现堆栈及队列

5,集合优化和增长因子

6,list集合的去重原理

1,UML

UML是一种画图工具用例图

通过建立图形之间的各种关系(如类与类之间的关系)来描述模型.

下面分享两张用UML创作的用例图

集合框架之list_第2张图片集合框架之list_第3张图片

2,list集合的增删改查

1.list集合的特点(增删改查 有序 可重复)

代码示例(如下)

package com.dgl.lis;


import java.util.ArrayList;

/**
 * 对list容器的增删改查
 * 注意:
 * @author zjjt
 *
 */
public class Demo1 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();//新建容器
        //新增
        list.add("zs");
        list.add("ls");
        list.add("ww");
        list.add("zl");
        //查询
        System.out.println(list.get(1));
        for (Object object : list) {
            System.out.println(object);
        }
        //修改
        list.set(1, "老六");//根据下标删除
        System.out.println("-----------------------");
        for (Object object : list) {
            System.out.println(object);
        }
        //删除
        Object obj2 = list.remove(1);
        list.remove("ww");
        System.out.println(obj2);
        System.out.println("-----------------------");
        for (Object object : list) {
            System.out.println(object);
        }
        
        //1,4,6,剔除集合中的元素 
        //企业中 调用第三方接口,要针对一些数据做过滤
        //结论,做集合元素剔除,不能够在原集合遍历的时候进行操作
        ArrayList list2 = new ArrayList();
        list2.add("1");
        list2.add("4");
        list2.add("6");
        list2.add("9");
        list2.add("11");
        for (String string : list2) {
            if (Integer.valueOf(string) % 2==1) {
                list2.remove(string);
            }
        }
    }
}

运行结果

zs
ls
ww
zl
-----------------------
zs
老六
ww
zl
老六
-----------------------
zs
zl

是基本的list集合运用

3,List集合的三种遍历方式

package com.dgl.lis;

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

public class Demo2 {
    
    public static void main(String[] args) {
        ArrayList list = new ArrayList();//新建容器
        //新增
        list.add("zs");
        list.add("ls");
        list.add("ww");
        list.add("zl");
        
        //增强for循环
        for (Object object : list) {
            System.out.println(object);
        }
        
        System.out.println("=========");
        
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        System.out.println("=========");
        
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        
        System.out.println("====迭代器=====");
        Iterator it = list.iterator();
        System.out.println(it.hasNext());
        System.out.println(it.next());
        
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }

}

4,LinkedList实现堆栈及队列

堆栈与队列的比较

堆栈:先进后出(有压栈大多用于购物)

队列:先进先出(一次只可取一个)

堆栈代码示例

package com.dgl.lis;

import java.util.LinkedList;

/**
 * 通过linkedlist实现队列以及堆栈的容器
 * @author zjjt
 *
 */
public class Dome3 {
    public static void main(String[] args) {
        Duilie duilie = new Duilie(new LinkedList());
        
//        Duizhan duilie = new Duizhan(new LinkedList());
        duilie.push("zs");
        duilie.push("ls");
        duilie.push("ww");
        duilie.push("八戒");
        System.out.println(duilie.pop());
        System.out.println(duilie.pop());
        System.out.println(duilie.pop());
        System.out.println(duilie.pop());
    }
}
//y要实现队列先建一个类,这个列自带一个队列
class Duilie{
    private LinkedList ll;

    public Duilie(LinkedList ll) {
        super();
        this.ll = ll;
    }
    
    //存
    public void push(Object obj) {
        ll.add(obj);
    }
    //取
    public Object pop() {
        return ll.remove();
    }
}

运行结果:

zs
ls
ww
八戒


队列代码示例

class Duizhan{//堆栈
    private LinkedList ll;

    public Duizhan(LinkedList ll) {
        super();
        this.ll = ll;
    }
    
    //存
    public void push(Object obj) {
        ll.add(obj);
    }
    //取
    public Object pop() {
        return ll.removeLast();
    }
}

运行结果:
八戒
ww

ls

zs

5,集合优化和增长因子

1、List集合底层是数组集合,是“可变数组” 

     2、会自动扩容,扩容因子为0.5

     3、公式:容器大小*增长因子

import java.lang.reflect.Field;
import java.util.ArrayList;
 
/**
 * 

 */
 
public class Dome4 {
    public static void main(String[] args) throws Exception{
        //String[] arr = new String[10];
        //arr[11] = "zs";
        //arr = new String[12];
        //arr[12] = "zs";
        
        ArrayList list = new ArrayList<>(100);
        for (int i = 0; i < 200; i++) {
            list.add(i);
            getlen(list);
        }
    }
 
    private static void getlen(ArrayList list) throws Exception {
        Field f = list.getClass().getDeclaredField("elementData");
        f.setAccessible(true);
        Object[] elementData = (Object[]) f.get(list);
        System.out.println("当前集合的元素个数:"+list.size()+";当前list集合的容量是:"+elementData.length);
    }

6,list集合的去重原理


import java.util.ArrayList;
 
/**
 * list集合去重底层原理
 * 结论:去重引用对象时,底层调用的是对象的equals方法
 * 

 */
 
 
public class Dome5 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        //新增
        list.add(new Person("aa",12));
        list.add(new Person("ss",32));
        list.add(new Person("dd",42));
        list.add(new Person("ff",82));
        list.add(new Person("gg",62));
        list.add(new Person("dd",42));
        System.out.println(list);//六个
        
        ArrayList listnew = new ArrayList<>();
        for (Object object : list) {
            if(!listnew.contains(object)) {
                listnew.add(object);
            }
        }
        System.out.println(listnew);//5个
        
    }
    
    
    public static void main2(String[] args) {
        ArrayList list = new ArrayList<>();
        //新增
        list.add("aa");
        list.add("ss");
        list.add("dd");
        list.add("ff");
        list.add("gg");
        list.add("dd");
        System.out.println(list);
        
        ArrayList listnew = new ArrayList<>();
        for (Object object : list) {
            if(!listnew.contains(object)) {
                listnew.add(object);
            }
        }
        System.out.println(listnew);
        
    }
    
    
}
class Person{
    private String name;
    private int 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 "Person [name=" + name + ", age=" + age + "]";
    }
    
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    public Person() {
        super();
    }
    
//    @Override
//    public boolean equals(Object obj) {
//        System.out.println("===========equals被调用===============");
//        return super.equals(obj);
//    }
    
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
 
    
    
    
}


你可能感兴趣的:(java,eclipse)