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

作者:海文宇 时间:2021-11-02 05:24:44 

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接口的方 * ist都可以使用.

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

标签:Java,集合,Collection,List,接口
0
投稿

猜你喜欢

  • Java实现的计算最大下标距离算法示例

    2022-02-09 19:14:37
  • Mybatis-plus多数据源配置的两种方式总结

    2023-07-24 05:22:48
  • Maven的porfile与SpringBoot的profile结合使用案例详解

    2023-11-14 00:07:59
  • 解决RedisTemplate调用increment报错问题

    2023-11-20 06:35:05
  • 浅谈Spring自定义注解从入门到精通

    2023-11-25 03:59:12
  • SparkSQl简介及运行原理

    2023-09-17 05:18:19
  • 老生常谈Java 网络编程 —— Socket 详解

    2023-07-12 16:32:54
  • Android 实现可任意拖动的悬浮窗功能(类似悬浮球)

    2023-08-07 10:19:05
  • Spring常用注解汇总

    2022-12-19 16:26:03
  • Java定义泛型方法实例分析

    2023-11-20 20:28:22
  • Java 集合概览(小结)

    2023-11-08 02:50:37
  • java HttpClient传输json格式的参数实例讲解

    2023-08-08 13:21:26
  • Redis6搭建集群并在SpringBoot中使用RedisTemplate的实现

    2023-10-31 14:48:05
  • C#获取网页源代码的方法

    2023-06-19 05:43:44
  • Java新手学习之IO流的简单使用

    2023-08-09 15:57:33
  • 解决使用ProcessBuilder踩到的坑及注意事项

    2023-11-24 01:37:55
  • java开发线上事故理解RocketMQ异步精髓

    2023-07-25 07:41:20
  • Android View移动的六种方法小结

    2023-07-06 02:43:39
  • JAVA实现对阿里云DNS的解析管理

    2023-11-24 13:25:15
  • 关于@GetMapping和@GetMapping(value=““)的区别

    2023-11-27 11:07:37
  • asp之家 软件编程 m.aspxhome.com