Java集合的Collection接口和List接口詳解

1集合的概念

  • 把集合看做是一個容器,集合不是一個類,是一套集合框架,框架體系包含很多的集合類,java api提供瞭
  • 集合存儲任意類型(基本包裝類型,引用類型)
  • 集合對元素的增刪查改操作起來非常方便的,專門提供很多方便操作的方法
  • 開發中經常集合來操作數據的,開發地位比較高的,考慮對數據的操作效率上的問題

2 集合的父類Collection接口

2.1常用方法

  • boolean add(E e) 添加某個元素
  • addAll(元素) 添加一個集合
  • remove(object) 刪除一個元素
  • removeAll(collection) 刪除一個集合
  • c.clear(); //移除所有
  • isEmpty() 判斷是否為空
    public static void main(String[] args) {
        //創建集合
        Collection c = new ArrayList();
        //添加
        c.add("張三");
        c.add(10);
        c.add(false);
        c.add('a');
        System.out.println(c);
//        addAll(元素) 添加一個集合
        Collection c2 = new ArrayList();
        c2.add("hello");
        c2.add("world");
        c2.add("java");
        c.addAll(c2);
        System.out.println(c);
        //刪除
        System.out.println("刪除張三元素是否成功:" + c.remove("張三2"));
        System.out.println(c);
        c.removeAll(c2);
        System.out.println("移除c2集合:" + c);
        //清空和判斷是否為空
//        c.clear(); //移除所有
//        System.out.println(c); //[]
        System.out.println(c.isEmpty()); //判斷集合中的元素是否為空,為空返回true,否則false
        System.out.println(c.contains("張三222")); //是否包含某個指定的元素,是返回true,否則false
        System.out.println("獲取集合中的元素個數:" + c.size()); //leng屬性
    }

2.2遍歷 

  • 使用foreach 遍歷
  • 使用迭代器遍歷
  • 使用toArray()方法轉成數組,再遍歷.
  • 使用for遍歷
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("張三");
        c.add("李四");
        c.add("王五");
        System.out.println(c);
        //foreach遍歷方式
        System.out.println("-------------1");
        for(Object obj : c){
            System.out.println(obj);
        }
        //iterator方法,方式二
        System.out.println("-------------2");
        Iterator it = c.iterator();
        while(it.hasNext()){
            Object obj = it.next();
            System.out.println(obj);
        }
        System.out.println("-------------3");
        //方式三,toArray
        Object[] objs = c.toArray();
        for(Object o : objs){
            System.out.println(o);
        }
        System.out.println("-------------4");
        //方式四
        for(Iterator iterator  = c.iterator();iterator.hasNext();){
            Object obj = iterator.next();
            System.out.println(obj);
        }
        System.out.println("-------------5");
        for(Iterator iterator = c.iterator();iterator.hasNext(); System.out.println(iterator.next())){}

    }

3 List接口

List接口繼承瞭Collection接口,所以Collection接口的方法List都可以使用.

3.1List接口常用方法

添加

  • boolean add(E e) 添加一個元素
  • void add(int index, E element) 添加某個元素到指定位置

boolean addAll(Collection<? extends E> c) 添加一個集合

  • boolean-addAll(int index, Collection<? extends E> c) 添加一個集合到指定位置

刪除

  • E remove(int index) 刪除指定位置的元素
  • boolean remove(Object o) 刪除某個元素
  • boolean removeAll(Collection<?> c) 刪除一個集合

修改

  • E set(int index, E element)

獲取

  • E get(int index)
  • int size()
  • 其他
  • int indexOf(Object o)
  • int lastIndexOf(Object o)
  • List subList(int fromIndex, int toIndex)

3.2遍歷

  • E get(int index) + int size()
  • ListIterator listIterator()
  • ListIterator listIterator(int index)

員工類:

package listdemo;
import java.util.Objects;
public class Employee {
    //員工屬性, id name age salary
    private Integer id;
    private String name;
    private Integer age;
    private Double salary;
    public Employee() {
    }
    public Employee(Integer id, String name, Integer age, Double salary) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Double getSalary() {
        return salary;
    }
    public void setSalary(Double salary) {
        this.salary = salary;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Employee employee = (Employee) o;
        return Objects.equals(id, employee.id) &&
                Objects.equals(name, employee.name) &&
                Objects.equals(age, employee.age) &&
                Objects.equals(salary, employee.salary);
    }
    @Override
    public int hashCode() {
        return Objects.hash(id, name, age, salary);
    }
    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                '}';
    }
}
public static void main(String[] args) {
        //創建一個list集合
        List list = new ArrayList();
        //添加的方法
        list.add("hello");
        list.add("java");
        list.add(1,"world"); //添加到指定的位置的元素,添加到第二個位置
        list.add("html");
        System.out.println(list);
        List list2 = new ArrayList();
        list2.add("test1");
        list2.add("test2");
        list2.add("test3");
//        list.addAll(list2); //添加一個集合
//        System.out.println(list);
        list.addAll(2,list2); //添加一個新集合到第一個老集合中指定的位置,下標為2
        System.out.println(list);
        //刪除
        // *      boolean remove(Object o)
        System.out.println(list.remove("java"));
        System.out.println(list);
        // *      E remove(int index)
        Object obj = list.remove(1);
        System.out.println(obj); //world
        System.out.println(list);
        // *       boolean removeAll(Collection<?> c)
        list.removeAll(list2);
        System.out.println("刪除新集合之後:" + list);
        //修改
        // *       E set(int index, E element)
        Object o = list.set(1, "編程語言");
        System.out.println(o);
        System.out.println("修改之後:" + list);
        // 其他
        // *       int indexOf(Object o) 從前面往後某個元素的位置
        // *       int lastIndexOf(Object o) 從後面往前面找某個元素的位置
        // *        List<E> subList(int fromIndex, int toIndex)
        List list3 = new ArrayList();
        list3.add("張三");
        list3.add("李四");
        list3.add("王五");
        list3.add("趙六");
        list3.add("小編");
        int i = list3.indexOf("李四2222");
        System.out.println("李四的位置:" + i);
        System.out.println("找王五的下標位置:" + list3.lastIndexOf("王五"));
        System.out.println(list3);
        List newsList = list3.subList(1, 4); //從老集合中截取1-3的位置的元素,並返回一個新的集合
        System.out.println(newsList); //1,2的位置的元素,3不包括,
    }

List的遍歷

  • E get(int index) + int size()
  • ListIterator listIterator()
  • ListIterator listIterator(int index)
  • iterator();
  • toArray();
  • foreach
  • toString
  • for()
package listdemo;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
 * 
 * 遍歷
 *  *       E get(int index) + int size()
 *  *      ListIterator<E> listIterator()
 *  *      ListIterator<E> listIterator(int index)
 *          iterator();
 *          toArray();
 *          foreach
 *          toString
 *          for()
 *          for()
 *
 */
public class ListDemo02 {
    public static void main(String[] args) {
        //E get(int index) + int size()
        List list = new ArrayList();
        list.add("張三");
        list.add("李四");
        list.add("王五");
        ListIterator listIterator1 = list.listIterator(1);
        if (listIterator1.hasNext()){
            System.out.println("從第一個元素開始取出:" +listIterator1.next());
        }
        if (listIterator1.hasNext()){
            System.out.println("繼續取下一個元素:" +listIterator1.next());
        }

        //size獲取集合中元素的個數
        System.out.println(list.size());
        //get(索引)獲取指定索引的元素
//        Object o = list.get(0);
//        System.out.println(o); //張三
//        o = list.get(1);
//        System.out.println(o); //李四
//        o = list.get(2);
//        System.out.println(o); //王五
        //以上出現重復,使用循環解決,結合size+get方法
        for (int i = 0; i < list.size(); i++) {
            Object o1 = list.get(i);
            System.out.println(o1);
        }
        List list2 = new ArrayList();
        list2.add("hello");
        list2.add("world");
        list2.add("java");
        ListIterator listIterator = list2.listIterator();//列表迭代器方法,返回迭代器對象
        //正向遍歷
        while (listIterator.hasNext()) { //判斷集合中是否有可取的下一個元素,如果有
            Object o = listIterator.next(); //取出第一個元素
            System.out.println(o);
        }
        System.out.println("------------------------");
        //逆序遍歷,在使用hasPrevious(),previous(),先正序遍歷才可以使用這個
        while(listIterator.hasPrevious()){
            Object obj = listIterator.previous();
            System.out.println(obj);
        }
    }
}

4 集合中元素的去重

package listdemo;
import java.util.ArrayList;
import java.util.List;
/**
 * 去除集合中重復的元素
 */
public class ListDemo03 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Employee(101,"張三",20,2000.0));
        list.add(new Employee(102,"李四",30,3000.0));
        list.add(new Employee(103,"王五",20,2000.0));
        list.add(new Employee(103,"王五",20,2000.0));
        //創建一個新的集合
		List newList = new ArrayList();
        for(Object obj : list){
            if (!newList.contains(obj)){
                newList.add(obj);
            }
        }
        list = newList; //把新集合的數據賦值給到老集合
        //遍歷老集合
       for(Object obj : list){
           System.out.println(obj);
        }
        //第二種去除重復的方式
        //冒泡,選擇,比較equlas
        //根據選擇排序的思想,從第一個元素依次和後面的每一個元素
        for (int i = 0; i < list.size(); i++) {
            for (int j = i+1; j < list.size(); j++) {
                //進行比較,如果第一個元素和第二個元素是相等
                //把第二個元素刪除
                if (list.get(i).equals(list.get(j))){
                    list.remove(j);
                    j--;
                }
            }
        }
        for(Object obj : list){
            System.out.println(obj);
        }
    }
}

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!  

推薦閱讀: