Java | 集合(Collection)和迭代器(Iterator)
集合(Collection)
集合就是Java中提供的一种 空器,可以用来存储多个数据。
集合和数组都是一个容器,它们有什么区别呢?
- 数组的长度是固定的,集合的长度是可变的。
- 数组中存储的是同一类型的数据,并且也可以存储基本类型数据,但是集合中存储的都是对象,并且没有泛型的时候,还可以存储不同的对象。
Collection集合框架
Collection是一个集合类的顶级接口,所有的集合类的接口都是他的子类,或者实现类。
List接口:
1、在序的集合
2、允许存储生活重复的元素
3、有索引,可以使用普通的for循环遍历
set接口:
1、不允许有重复的元素
2、没有索引,不能进行普通的for循环
3、LinkedHashSet
是有序的集合
Collection里面的方法
为什么要学习Collection里面的方法,是因为在用所有的Collection的实现类的时候,都可以用这些方法,所以学习这些方法就相当于学习了所有子类的方法,在以后学习子类方法的时候,只用学习一部分子类特有的就行了。
public boolean add(E e);
把给定的对象添加到当前集合中
public void clear(E e);
清空集合中所有的元素
public boolean remove(E e);
把给定的对象在当前集合中删除
public boolean contains(E e);
判断当前集合中是否包含给定对象
public boolean isEmpty();
判断当前集合是否为空
public int size();
返回集合中元素的个数
public Object[] toArray();
把集合中的元素,存储到数组中
使用:
创建一个集合:
public boolean add(E e);` 把给定的对象添加到当前集合中
//使用多态
Collection<String> coll = new ArrayList<>();
coll.add("a");
coll.add("b");
coll.add("c");
coll.add("d");
//输出
System.out.println(coll); //[a, b, c, d]
public void clear(E e);
清空集合中所有的元素
coll.clear();
System.out.println(coll); //[]
public boolean remove(E e);
把给定的对象在当前集合中删除
coll.remove("a");
System.out.println(coll); //[b, c, d]
public boolean contains(E e);
判断当前集合中是否包含给定对象
//包含返回true,没有返回false
System.out.println(coll.contains("c")); //true
public boolean isEmpty();
判断当前集合是否为空
//判断当前集合是否为空,如果为空则为true,否则为false
System.out.println(coll.isEmpty()); //false
public int size();
返回集合中元素的个数
System.out.println(coll.size()); //4
public T[] toArray(T[] a);
把集合中的元素,存储到数组中
//创建一个数组,这个数组的长度就是集合的长度
String[] strArr = new String[coll.size()];
//然后把集合中的元素全都存到数组中
coll.toArray(strArr);
for (String s : strArr) {
System.out.println(s);
/* 循环输出:
a
b
c
d
*/
}
迭代器(Iterator)
我们在开发中经常需要遍厉集合,所以JDK专门提供了一个接口java.util.Iterator
,这个接口的作用主要是用来迭代访问Collection中的元素的,所以换为迭代器。
迭代器(Iterator)的原理和使用
因为Collection
继承了Iterator
,所以可以使用Collection
里面的iterator()
,来获取迭代器。
最初的迭器的使用:
//使用多态
Collection<String> coll = new ArrayList<>();
coll.add("a");
coll.add("b");
coll.add("c");
coll.add("d");
System.out.println(coll); //[a, b, c, d]
//通过集合获取迭代器
Iterator<String> iterator = coll.iterator();
//用hasNext()方法来判断有没有下一个元素,如果有返回true
while (iterator.hasNext()) {
//用next()来获取下一个元素
//并且下标也移动到了当前元素下面,以方便上面的判断
String s = iterator.next();
System.out.println(s);
/* 迭代的结果:
a
b
c
d
*/
}
使用增强for循环:foreach
来遍历集合,其实foreach
里面也是使用Iterator
来实现的。
for (String s : coll) {
System.out.println(s);
/* 循环的结果:
a
b
c
d
*/
}
使用Java8里面的新特性Lambda
表达式循环集合,其实这个里面封装的是增强for循环。
coll.forEach(x -> System.out.println(x));
/* 循环的结果:
a
b
c
d
*/
forEach
里面的方法:
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
这个方法是在Iterator里面,是一个默认方法,因为Collection继承了这个方法,所以可以使用这个方法。
集合工具(Collections)
java.utils.Collections
集合工具类,就是用来简化对集合进行操作的。
常用的方法
pubic stativc <T> boolean addAll(Collection<T> c,T... elements);
往集合中批量添加元素。public static void shuffle(List<?> list);
乱序。public static <T> void sort(List<T> list);
将集合中的元素按昭默认规则排序。public static <T> void sort(List<T> list, Comparator<? super T>);
将集合中的元素按照指定规则进行排序。
使用
pubic stativc <T> boolean addAll(Collection<T> c,T... elements);
往集合中批量添加元素。
List<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c", "d");
System.out.println(list); //[a, b, c, d]
public static void shuffle(List<?> list);
乱序。
List<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c", "d");
System.out.println(list); //[a, b, c, d]
Collections.shuffle(list);
System.out.println(list); //[d, b, a, c]随机的
public static <T> void sort(List<T> list);
将集合中的元素按昭默认规则排序。
List<String> list = new ArrayList<>();
//无序的
Collections.addAll(list, "b", "d", "g", "o");
Collections.sort(list);
System.out.println(list); //[b, d, g, o]
public static <T> void sort(List<T> list, Comparator<? super T>);
将集合中的元素按照指定规则进行排序。
List<Integer> list = new ArrayList<>();
list.add(9);
list.add(3);
list.add(4);
list.add(2);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//return o2 - o1; //[9, 4, 3, 2] 降序
return o1 - o2; //[2, 3, 4, 9] 升序
}
});
System.out.println(list);
细节决定成败!
个人愚见,如有不对,恳请扶正!
Java | 集合(Collection)和迭代器(Iterator)的更多相关文章
- Java集合 Collection、Set、Map、泛型 简要笔记
集合 什么是集合 概念 对象的容器,实现了对对象常用的操作 和数组的区别 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能存储引用类型 位置 java.util.*; Colle ...
- Java 集合系列18之 Iterator和Enumeration比较
概要 这一章,我们对Iterator和Enumeration进行比较学习.内容包括:第1部分 Iterator和Enumeration区别第2部分 Iterator和Enumeration实例 转载请 ...
- Java 集合-Collection接口和迭代器的实现
2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...
- java 集合2(迭代器)
迭代器方法:(把迭代器想象成抓娃娃机的爪子) hasNext() 问是否有元素可遍历,如果有元素可以遍历,返回true,否则返回false 工作原理:这一个迭代的过程是这样的,获取到迭代器时候 ...
- java集合——Collection接口
Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...
- Thinking in Java——集合(Collection)
一.ArrayList的使用(略) 二.容器的基本概念 (一).Collection是集合类的基本接口 主要方法: public interface Collection<E>{ bool ...
- java集合的操作(set,Iterator)
集合的操作 Iterator.Collection.Set和HashSet关系 Iterator<——Collection<——Set<——HashSet Iterator中的方法: ...
- JAVA集合--Collection接口
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 在概述里面也说过:Collection是jav ...
- Java 集合Collection与List的详解
1.什么是集合 存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式. 集合的出现就是为了持有对象.集合中可以存储任意类型的 ...
- Java集合--Collection
概要 首先,我们对Collection进行说明.下面先看看Collection的一些框架类的关系图: Collection是一个接口,它主要的两个分支是:List 和 Set. List和Set都是接 ...
随机推荐
- 27.Qt Quick QML-State、Transition
1.State所有组件均具有默认状态,该状态定义对象和属性值的默认配置.可以通过向States属性添加State组件来定义新状态,以允许组件在不同配置之间切换.许多用户界面设计都是由State状态实现 ...
- MongoDB学习笔记:文档Crud Shell
MongoDB学习笔记:文档Crud Shell 文档插入 一.插入语法 db.collection.insertOne() 将单个文档插入到集合中.db.collection.insertMan ...
- Go语言流程控制02--选择结构之switch
package main import "fmt" /* @星座诊所2(switch) 根据用户输入的出生月份猜测其星座: ·白羊(4) 金牛(5) 双子(6) 巨蟹(7) 狮子( ...
- MindSpore技术理解(上)
MindSpore技术理解(上) 引言 深度学习研究和应用在近几十年得到了爆炸式的发展,掀起了人工智能的第三次浪潮,并且在图像识别.语音识别与合成.无人驾驶.机器视觉等方面取得了巨大的成功.这也对算法 ...
- Django框架之路由层汇总
一 Django中路由的作用 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来 ...
- 5, java数据结构和算法: 栈 , 入栈, 出栈, 正序遍历,,逆序遍历
直接上代码: class ArrayStack{ //用数组模拟栈 int maxSize; int[] stack; int top = -1;//表示栈顶 public ArrayStack(in ...
- flume采集MongoDB数据到Kafka中
环境说明 centos7(运行于vbox虚拟机) flume1.9.0(自定义了flume连接mongodb的source插件) jdk1.8 kafka(2.11) zookeeper(3.57) ...
- vue3.0 props
.orange { color: rgba(255, 165, 0, 1) } Vue3.0 props 1.你是否遇到了,引用props数据报错的问题? 在Vue3.0中,采用了proxy,让很多数 ...
- python 日期与字符串之间的转换
1.str转换为datetime >>> from datetime import datetime >>> cday = datetime.strptime('2 ...
- Zookeeper 面试题(持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...