Java-集合

集合

数组的长度是固定的,操作数据很麻烦,java内部给我们提供了集合类用来存放数据的一个容器。不仅可以存储对象,长度可改变

集合类

  1. 它的长度可以改变
  2. 能存储任意的对象
  3. 长度是随着你元素的增加而增加

    数组和集合区别?

  4. 数组可以存基本数据类型和引用数据类型

  5. 集合当中只可以存放引用数据类型
  6. 数组的长度固定,集合长度是可以改变的

数组与集合的应用?

  • 数据元素个数固定-数组
  • 元素不固定-集合

集合类在JAVA中的体系结构

[Collection接口]

####Collection集合-添加元素

添加一个元素boolean add(E e)

添加一个集合boolean addAll(Collection<> c)

public static void main(String[] args){
        Collection c = new ArrayList();
        c.add(999);
        c.add(999);
        c.add("String");
        c.add(true);
        System.out.println(c);
    }
[999, 999, String, true]

#####注意

  • add()方法是添加元素
  • 添加的基本数据类型会自动装箱
  • 可以添加重复元素
  • 内部已经覆盖了tostring()方法

Collection集合-移除元素

移除一个元素boolean remove(Object o)

删除所有元素void clear()

判断是否为空boolean isEmpty()

删除两个集合的交集boolean removeAll(Collection<?> c)

Collection c = new ArrayList();
c.add("6");

c.remove("6");
//清空所有
c.clear();

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

Collection集合-获取集合长度

System.out.println(c.size());

Collection集合-集合转数组

  1. List转数组 然后遍历 Object[] toArray()
Collection c = new ArrayList();
c.add(1);
c.add(2);
System.out.println(c);
>> [1,2]

/*集合转数组*/
Object[] o = c.toArray();
System.out.println(o[0]);
>> 1

Collection集合-遍历

  • 方式一toArray()
    `java
    Collection per = new ArrayList();
    per.add(new Person(“张三”));
    per.add(new Person(“李四”));

Object[] res = per.toArray(); //自动把数组当中所有元素向上转型
System.out.println(res); //打印则是地址

for(int i=0; i<res.length; i++) {
Person p = (Person)res[i]; //向下转型
System.out.println(p.getName());
}


- 方式二`迭代器`
```java
public static void main(String[] args) {
    Collection c = new ArrayList();
    c.add(new Cat("Mini"));
    c.add(new Cat("Aimi"));

    //遍历
    Iterator it = c.iterator(); //放进容器 里面的对象都是Object类型

    while(it.hasNext()) {
        Cat o = (Cat)it.next(); //向下转型
        System.out.println(o.name);
    }
}

总结

  • 判断调用的集合是否包含(全部包含)传入集合boolean containsAll(Object o)
  • 取两个集合的交集boolean retainAll(Collection<?> c)
  • add()可以添加一个元素到集合中
  • addAll()集合添加集合
  • remove()移除一个元素
  • clear()清空集合
  • isEmpty()判断是否为空
  • size()获取集合长度

[List]

根据角标添加元素

  • list是有角标的可以根据角标去添加元素。
  • list.add(index,Object element); index必须要<=size

获取指定角标的元素

System.out.println(list.get(0));

迭代器-删除元素

迭代器-遍历集合

public class Test2 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");

        Iterator it = list.iterator();
        //遍历集合
        while(it.hasNext()) {
            //取出对应的元素
            String s = (String)it.next();
            System.out.println(s);
            if(s.equals("2")){ //等于“2”删除
                it.remove();
            }
        }

        System.out.println(list);
    }
}

迭代器-添加元素

public class Main {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");

        //list当中有自己的迭代器
         ListIterator it =list.listIterator();

        while(it.hasNext()) {
            String str = (String)it.next();
            if(str.equals("2")) {
                it.add("99");
            }
        }

        System.out.println(list);

        // hasPrevious() 是否含有上一个

        while(it.hasPrevious()) {
            System.out.println("LOOP" + it.previousIndex());
            System.out.println(it.previous());
        }
    }

[ArrayList]数组实现

把原有的数据复制出来,再创建一个新数组容量增加,把复制的数组放到新数组当中原来的数组被扔掉

添加元素

把对应的值,通过前一个值覆盖后一个值得方式,依次往后移动,把要插入的值覆盖到指定的位置

删除元素

依次往前赋值,最后一个元素设为null

去除元素

/*
1. 创建一个空的集合
2. 依次取出每一个元素
3. 每取出一个元素,先判断新集合当中是否包含该元素
4. 如果包含 就不添加了
*/

public static ArrayList getSingleELe(ArrayList list){
    /*创建一个空的集合*/
    ArrayList newList = new ArrayList();

    /*依次取出每一个元素*/
    ListIterator it = list.listIterator();
    while(it.hasNext()){
        Object obj = it.next();
        /*判断是否包含其中*/
        if(!newList.contains(obj)){
            newList.add(obj);
        }
    }
    /*返回新集合*/
    return newList;
}

“如果是对象类型 需要覆写eauals方法”


[LinkedList]链表实现

public class Main {
    public static void main(String[] args){
        LinkedList a1 = new LinkedList();

        a1.add(1);
        a1.add(2);
        a1.add(3);
        /*特有*/

        // 第一个位置添加元素
        a1.addFirst("Start");
        // 最后位置添加元素
        a1.addLast("End");

        // 移除第一个元素
        a1.removeFirst();
        // 移除最后一个元素
        a1.removeLast();

        // 根据角标获取元素
        System.out.println(a1.get(2));



    }
}


[Vector]数组实现

import java.util.Enumeration;
import java.util.Vector;

public class Main {
    public static void main(String[] args){
        Vector ve = new Vector();

        /*特有方法 加锁更安全*/

        // 添加元素
        ve.add(1);
        ve.addElement(2);
        System.out.println(ve);

        // 遍历元素
        Enumeration e = ve.elements();
        while(e.hasMoreElements()){
            System.out.println(e.nextElement());
        }

    }
}

TreeSet

  • 对添加的元素进行排序

如果添加的是一个对象。需要实现接口Comparable<ClassName> 覆写compareTo()

如果返回值为0则添加一个对象

如果返回值为1返回全部对象

返回-1则返回逆序。


  转载请注明: linis Java-集合

 上一篇
响应式布局 响应式布局
响应式 定义 利用一套代码实现页面的布局和排版以适配不同分辨率的设备 视口宽度与设备宽度 width device-width 设备屏幕宽度 viewport视口 步骤Step1 <meta http-equiv="X-UA-C
2019-04-20
下一篇 
动效开发 动效开发
动效开发技术能力 Javascript Css SVG Canvas 我们需要把重心放在CSS3动画上面,因为当红小生就是CSS3结合JavaScript CSS3 transition过度动画 如果没有transition元素,
2019-04-19
  目录