集合:对象的容器,定义了对多个对象进行操作的常用方法。可实现数组的功能

集合和数组的区别:

  • 数组长度固定,集合长度不固定
  • 数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型。

集合的位置:java.util.*;

Collection体系集合:

Collection父接口:

特点:代表一组任意类型的对象,无序,无下标,不能重复

方法:

  • boolean add(Object o)  //添加一个对象
  • boolean addAll(Collection c)  //将一个集合中的所有对象添加到此集合中
  • void clear()     //清空此集合中的所有对象
  • boolean contains(Object o)     // 检测此集合中是否包含o对象
  • boolean equals(Object o)     //比较此集合中是否与指定对象相等
  • boolean isEmpty()       //判断此集合是否为空
  • boolean remove(Object o)     //在此集合中移出o对象
  • int size()     //返回此集合中的元素个数
  • Object[] toArray()  //将此集合转换成数组

使用;

package com.java.leetcode.collection;
/*
Collection接口的使用
添加,删除,遍历,判断
*/ import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class Demo01 {
public static void main(String[] args) {
//创建集合
Collection collection = new ArrayList();
//添加
collection.add("苹果");
collection.add("香蕉");
collection.add("梨");
System.out.println("当前元素个数:"+collection.size());
System.out.println(collection);
/*
遍历元素
1.使用增强for。不能用for,因为collection没有下标。
*/
System.out.println("********使用增强for********");
for (Object object:collection) {
System.out.println(object);
}
/*
2.使用迭代器(专门用来遍历集合的一种方法)
Iterator是一个接口,没有实现类,通过以下方法实现集合的遍历
hasNext() 如果仍有元素可以迭代,则返回true
next() 返回迭代的下一个元素
remove() 从迭代器指向的collection中移除迭代器返回的最后一个元素
在迭代器中只能使用迭代器的移除方法,不能用collection的
*/
System.out.println("********使用迭代器********");
Iterator iterator =collection.iterator();
while (iterator.hasNext()){
String object = (String)iterator.next();
System.out.println(object);
}
System.out.println("是否有苹果?"+collection.contains("苹果"));
System.out.println("是否有榴莲?"+collection.contains("榴莲"));
collection.remove("香蕉");
System.out.println(collection);
collection.clear();
System.out.println(collection);
}
}

运行结果:

List子接口

特点:有序,有下标,元素可以重复。

方法:

  • void add(int index,Object o)   //在index位置插入对象o
  • boolean addAll(int index,Collection c)   //将一个集合中的元素添加到此集合中的index位置
  • Object get(int index)   //返回集合中指定位置的元素
  • List subList(int fromIndex,int toIndex)   //返回fromIndex和toIndex之间的集合元素。

1.

package com.java.leetcode.collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
List子接口
特点:有序,有下标,元素可以重复
*/
public class Demo02 {
public static void main(String[] args) {
//创建集合对象
List list = new ArrayList();
//添加元素
list.add("苹果");
list.add("香蕉");
list.add("榴莲");
list.add("火龙果");
list.add("黄桃");
System.out.println("元素个数"+list.size());
System.out.println("元素内容:"+list.toString());
//删除元素
list.remove("苹果");
list.remove(1); //因为list有下标,可以通过下标删除。苹果删除之后,下标为1的是榴莲
System.out.println("删除之后:"+list.toString());
//遍历,使用for遍历
System.out.println("*******使用for循环遍历*******");
for (int i = 0; i <list.size(); i++) {
System.out.println(list.get(i)); //此处get返回的是Object类型
}
System.out.println("*******使用增强for遍历*******");
for (Object o:list ) {
System.out.println(o);
}
System.out.println("*******使用迭代器遍历*******");
Iterator it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
/*
接口 ListIterator<E>
方法:
void add(E e) //将指定的元素插入列表。
boolean hasNext() //以正向遍历列表时,如果列表迭代器有多个元素,则返回true。
boolean hasPrevious //如果以逆向遍历列表,列表迭代器有多个元素,就返回true。
E next() //返回列表中的下一个元素
int nextIndex() //返回对nxt的后续调用所返回元素的索引。
E previous() //返回列表的前一个元素
int PreviousIndex() //返回对previous的后续调用所返回元素的索引
void remove() //从列表中移除由next或previous返回的最后一个元素
void set(E e) //用指定元素替换next或previous返回的最后一个元素
*/
System.out.println("*******使用列表迭代器从前往后遍历*******");
ListIterator lit = list.listIterator();
while (lit.hasNext()){
System.out.println("下标"+lit.nextIndex()+":"+lit.next());
}
System.out.println("*******使用列表迭代器从后往前遍历*******");
while (lit.hasPrevious()){ //此时经历上面从前往后的遍历后,指针已经走到了列表的最后
System.out.println("下标"+lit.previousIndex()+":"+lit.previous());
}
//判断 contains
System.out.println();
System.out.println("苹果是否存在?"+list.contains("苹果"));
System.out.println("列表是否为空?"+list.isEmpty());
//获取位置
System.out.println("黄桃的位置:"+list.indexOf("黄桃"));
}
}

运行结果:

2.

package com.java.leetcode.collection;

import java.util.ArrayList;
import java.util.List; public class Demo03 {
public static void main(String[] args) {
List list = new ArrayList();
/*
添加数字数据(自动装箱)
集合只能存储引用数据类型,不能存储基本数据类型。
在向集合添加基本数据类型时,会自动装箱。
例如list.add(200); 该200已经不是基本数据的int 的200了,而是包装类Integer
*/
for (int i = 0; i <=100 ; ) {
list.add(i);
i = i+10;
}
System.out.println("元素个数:"+list.size());
System.out.println("元素内容:"+list);
// list.remove(20);这里会报IndexOutOfBoundsException异常,因为列表大小为11,而这里传入的20 认为是下标
list.remove((Object)20);
System.out.println("删除之后:"+list);
list.remove(new Integer(0)); //Integer是包装类,是一个类。
System.out.println("删除之后:"+list);
//subList,返回子集合,含头不含尾
List sublist = list.subList(1,5);
System.out.println(sublist);
}
}

运行结果

 List实现类:

  ArrayList;

  • 数组结构实现,查询快,增删慢
  • JDK1.2版本,运行效率快,线程不安全

  Vector:

  • 数组结构实现,查询快,增删慢
  • JDK1.0版本,运行效率慢,线程安全

  LinkedList:

  • 链表结构实现,增删快,查询慢
  • 是一个双向链表

集合——Collection接口,List接口的更多相关文章

  1. java集合 之 Collection和Iterator接口

    Collection是List,Queue和Set接口的父接口,该接口里定义的方法即可用于操作Set集合,也可以用于List和Queue集合.Collection接口里定义了如下操作元素的方法. bo ...

  2. JAVA集合详解(Collection和Map接口)

    原文地址http://blog.csdn.net/lioncode/article/details/8673391 在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父 ...

  3. JAVA集合--Collection接口

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     在概述里面也说过:Collection是jav ...

  4. 集合-Collection接口

    集合 和 数组 的比较: 数组 - 本质上就是在内存空间中申请的一段连续内存空间,存放多个相同类型的数据 - 数组一旦定义完毕,则在内存空间中的长度固定. - 插入/删除元素时可能导致大量元素的移动, ...

  5. 集合--Collection接口详解&&迭代器

    /* * 集合的顶层接口--Collection接口 * 添加 * add() * addAll() * * 遍历集合 * iterator() 迭代器 * * 删除 * remove() * rem ...

  6. Java中的集合(六)继承Collection的Set接口

    Java中的集合(六)继承Collection的Set接口 一.Set接口的简介 Set接口和List接口都是继承自Collection接口,它与Collection接口中功能基本一致,并没有对Col ...

  7. Java中的集合(五)继承Collection的List接口

    Java中的集合(五)继承Collection的List接口 一.List接口简介 List是有序的Collection的,此接口能够精确的控制每个元素插入的位置.用户能够根据索引(元素在List接口 ...

  8. Java中的集合(三)继承Collection的Queue接口

    Java中的集合(三)继承Collection的Queue接口 一.Queue介绍 Queue接口继承自Collection接口,是Java中定义的一种队列数据结构,元素是有序的(按插入顺序排序),先 ...

  9. java集合(2)-Collection与Iterator接口

    1 package com.j1803.collectionOfIterator; 2 import java.util.ArrayList; 3 import java.util.Collectio ...

随机推荐

  1. mmap代替通用IO读取文件数据(curious)

    提供一份测试demo: #include <stdio.h> #include <string.h> #include <stdlib.h> #include &l ...

  2. 半吊子菜鸟学Web开发2 --JavaScript学习1

    JavaScript是一种类C的语言,对于我来说学起来还是蛮轻松的 1 输出 console.log(**); 相当于print console.assert(*);弹窗 2 变量 JS是动态变量 类 ...

  3. 为什么以iPhone6为标准的设计稿的尺寸是以750px宽度来设计的呢?

    iPhone6的满屏宽度是375px,而iPhone6采用的视网膜屏的物理像素是满屏宽度的2倍,也就是dpr(设备像素比)为2, 并且设计师所用的PS设计软件分辨率和像素关系是1:1.所以为了做出的清 ...

  4. vue异步组件?

    为了简化,Vue 允许你以一个工厂函数的方式定义你的组件,这个工厂函数会异步解析你的组件定义.Vue 只有在这个组件需要被渲染的时候才会触发该工厂函数,且会把结果缓存起来供未来重渲染Vue.compo ...

  5. 什么是Spring Cloud Bus?

    spring cloud bus 将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务直接的通讯,也可用于监控. 如果修改了配置文件,发送一次请求,所有的客户端便会重新读取配置 ...

  6. MybatisPlus 多租户的常见问题

    mybatis plus :https://mp.baomidou.com/guide/interceptor-tenant-line.html 如果最终执行的sql出现select查询没有租户ID, ...

  7. WeakHashMap 是怎么工作的?

    WeakHashMap 的工作与正常的 HashMap 类似,但是使用弱引用作为 key,意思就是当 key 对象没有任何引用时,key/value 将会被回收.

  8. java-方法引用

    /** * 方法引用格式: * 双冒号:: 引用运算符,它所在的表达式被称为方法引用.如果Lambda表达式 * 的函数方案已经存在于某个地方的实现中, * ===>那么可以通过双冒号来引用改方 ...

  9. 在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

    在测试目标只关注 Spring MVC 组件的情况下,WebMvcTest 注释用于单元测试 Spring MVC 应用程序.在上面显示的快照中,我们只想启动 ToTestController. 执行 ...

  10. 说说对 SQL 语句优化有哪些方法?

    1.Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可 以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后. 2.用 EXISTS 替代 ...