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

 更新时间:2022年3月8日 17:16  点击:342 作者:海文宇

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);
        }
    }
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注猪先飞的更多内容!  

原文出处:https://blog.csdn.net/Walker_sis/article/details/123332486

[!--infotagslink--]

相关文章