集合的打印

必须使用 Arrays.toString() 来生成数组的可打印形式。
但是打印集合无需任何帮助。

/**
* 集合的打印
* @author myf
*/
public class PrintingCollections {
public static void main(String[] args) {
Collection<Integer> collection = new ArrayList<>();
// Collections.addAll()接收一个Collection对象,以及一个数组或是逗号分隔的列表
Collections.addAll(collection, 1,2,3,4);
System.out.println(collection);
//[1, 2, 3, 4]
}
}

List包含ArrayList和LinkedList。
Set包含HashSet、TreeSet和LinkedHashSet。
Map包含HashMap、TreeMap和LinkedHashMap。

列表List

List承诺将元素保存在特定的序列中。List接口在Collection的基础上添加了许多方法,允许在List的中建插入和删除元素。
有两种类型的List:

  • 基本的ArrayList,擅长随机访问元素,但在List中间插入和删除元素时速度较慢。
  • LinkedList,它通过较低的代价在List中间进行插入和删除操作,提供了优化的顺序访问。linkedList对于随机访问来说相对较慢,但它具有比ArrayList更大的特征集。
/**
* @author myf
*/
public class ListFeatures {
public static void main(String[] args) {
List<Fruits> appleList = new ArrayList<>();
Fruits apple = new Fruits("apple");
appleList.add(apple); // contains()方法判断对象是否在集合中
// true
System.out.println(appleList.contains(apple)); // remove()方法删除集合中的对象
appleList.remove(apple);
// false
System.out.println(appleList.contains(apple)); // indexOf()找到对象的下标号
appleList.add(apple);
// 0
System.out.println(appleList.indexOf(apple)); appleList.add(new Fruits("orange"));
appleList.add(new Fruits("banana"));
// subList从大列表中切片
List<Fruits> fruitsArrayList = appleList.subList(0,2);
// [Fruits{name='apple'}, Fruits{name='orange'}, Fruits{name='banana'}]
System.out.println(appleList);
// [Fruits{name='orange'}, Fruits{name='apple'}]
// fruitsArrayList.add(appleList.get(0));
System.out.println(fruitsArrayList);
// 判断是否是子列表,不论顺序
// true
System.out.println(appleList.containsAll(fruitsArrayList)); // “集合交集”操作
// appleList.retainAll(fruitsArrayList);
// System.out.println(appleList);
// [Fruits{name='apple'}, Fruits{name='orange'}]
fruitsArrayList.retainAll(appleList);
System.out.println(fruitsArrayList); // 移除元素操作
appleList.removeAll(fruitsArrayList);
// [Fruits{name='banana'}]
System.out.println(appleList); // 替换元素
appleList.set(0,new Fruits("moyifeng"));
// [Fruits{name='moyifeng'}]
System.out.println(appleList);
}
}
class Fruits {
String name; public Fruits(String name) {
this.name = name;
} @Override
public String toString() {
return "Fruits{" +
"name='" + name + '\'' +
'}';
}
}

迭代器Iterators

迭代器是一个对象,它在一个序列中移动并选择该序列中的每个对象,而客户端程序员不知道或不关心该序列的底层结构。另外,迭代器通常被称为轻量级对象(lightweight object):创建它的代价小。因此,经常可以看到一些对迭代器有些奇怪的约束。例如,Java 的 Iterator 只能单向移动。这个 Iterator 只能用来:

  1. 使用 iterator() 方法要求集合返回一个 Iterator。 Iterator 将准备好返回序列中的第一个元素。
  2. 使用next() 方法获得序列中的下一个元素。
  3. 使用 hasNext() 方法检查序列中是否还有元素。
  4. 使用 remove()方法将迭代器最近返回的那个元素删除。
/**
* @author myf
*/
public class SimpleIteration {
public static void main(String[] args) {
List<Fruits> fruitsList = new ArrayList<>();
fruitsList.add(new Fruits("test"));
fruitsList.add(new Fruits("apple"));
fruitsList.add(new Fruits("orange"));
fruitsList.add(new Fruits("banana")); Iterator<Fruits> iterator = fruitsList.iterator();
iterator.next();
iterator.remove();
while (iterator.hasNext()){
System.out.println(iterator.next());
} System.out.println(fruitsList.size());
}
}

ListIterator

  1. ListIterator 是一个更强大的 Iterator 子类型,它只能由各种 List 类生成。
  2. Iterator 只能向前移动,而 ListIterator 可以双向移动
  3. 可以使用 set() 方法替换它访问过的最近一个元素。
  4. 通过调用 listIterator() 方法来生成指向 List 开头处的 ListIterator 。
  5. 可以通过调用 listIterator(n) 创建一个一开始就指向列表索引号为 n 的元素处的 ListIterator 。
/**
* @author myf
*/
public class ListIteration {
public static void main(String[] args) {
List<Fruits> fruitsList = new ArrayList<>();
fruitsList.add(new Fruits("test"));
fruitsList.add(new Fruits("apple"));
fruitsList.add(new Fruits("orange"));
fruitsList.add(new Fruits("banana")); ListIterator<Fruits> listIterator = fruitsList.listIterator();
while (listIterator.hasNext()){
System.out.print(listIterator.nextIndex());
System.out.println(listIterator.next());
} ListIterator<Fruits> fruitsListIterator = fruitsList.listIterator(4);
while (fruitsListIterator.hasPrevious()){
System.out.print(fruitsListIterator.previousIndex());
System.out.println(fruitsListIterator.previous());
}
}
}

集合的打印、列表List、迭代器Iterators的更多相关文章

  1. Map集合、散列表、红黑树介绍

    前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合: Collection总览 List集合就这么简单[源码剖析] 原本我是打算继续将Collection下的 ...

  2. python打印列表的下标和值的例子:

    python打印列表的下标和值的例子: In [1]: list01=[1,4,5] In [10]: def funct01(ll):   ....:     for index,value in ...

  3. 编写高质量代码改善C#程序的157个建议——建议30:使用LINQ取代集合中的比较器和迭代器

    建议30:使用LINQ取代集合中的比较器和迭代器 LINQ提供了类似于SQL的语法来实现遍历.筛选与投影集合的功能. static void Main(string[] args) { List< ...

  4. Redis底层探秘(四):整数集合及压缩列表

    整数集合 整数集合(intset)是集合键的底层实现之一,当一个集合只包含 整数值元素,并且这个集合的元素数量不多时,Redis就会使用郑书记和作为集合键的底层实现. 整数集合的实现 整数集合是red ...

  5. php实现从尾到头打印列表

    php实现从尾到头打印列表 一.总结 4.数组倒序:array_reverse() 5.函数肯定要return,而不是echo 二.php实现从尾到头打印列表 输入一个链表,从尾到头打印链表每个节点的 ...

  6. 数据绑定(五)使用集合对象作为列表控件的ItemsSource

    原文:数据绑定(五)使用集合对象作为列表控件的ItemsSource ItemsSource属性可以接收一个IEnumerable接口派生类的实例作为自己的值,ItemsSource里存放的是一条一条 ...

  7. Redis 学习笔记(篇四):整数集合和压缩列表

    整数集合 Redis 中当一个集合(set)中只包含整数,并且元素不多时,底层使用整数集合实现,否则使用字典实现. 那么: 为什么会出现整数集合呢?都使用字典存储不行吗? 整数集合在 Redis 中的 ...

  8. Javase之集合体系之(1)集合顶层类Collection与其迭代器知识

    集合体系之集合顶层类Collection与其迭代器知识 集合的由来:Java是一门面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,就必须把多个对象进行存储,而要存 ...

  9. Redis数据结构—整数集合与压缩列表

    目录 Redis数据结构-整数集合与压缩列表 整数集合的实现 整数集合的升级 整数集合不支持降级 压缩列表的构成 压缩列表节点的构成 小结 Redis数据结构-整数集合与压缩列表 大家好,我是白泽.今 ...

随机推荐

  1. MYSQL 连接举例

    内连接:连接的多个数据必须存在才能连接select * from sjh14482条记录 create table sjha as ( select * from sjh1 limit 20 )sel ...

  2. SpringBoot整合Shiro实现权限控制

    目录 1.SpringBoot整合Shiro 1.1.shiro简介 1.2.代码的具体实现 1.2.1.Maven的配置 1.2.2.整合需要实现的类 1.2.3.项目结构 1.2.4.ShiroC ...

  3. C#/.NET/.NET Core学习视频汇总(持续更新ing)

    前言: 之前有很多小伙伴在我的公众号后台留言问有没有C#/.NET/.NET Core这方面相关的视频推荐,我一般都会推荐他们去B站搜索一下.今天刚好有空收集了网上一些比较好的C#/.NET/.NET ...

  4. Leetcode春季活动打卡第三天:面试题 10.01. 合并排序的数组

    Leetcode春季活动打卡第三天:面试题 10.01. 合并排序的数组 Leetcode春季活动打卡第三天:面试题 10.01. 合并排序的数组 思路 这道题,两个数组原本就有序.于是我们采用双指针 ...

  5. powerdesigner连接postgresql数据库生成pdm及word文档

    1.准备软件: powerdesigner165与postgresql的驱动:psqlodbc_11_01_0000 2.安装并破解完成powerdesigner165 参看链接:https://ww ...

  6. vue点击复制功能

    复制功能,选中复制或者点击复制(不使用插件的情况下) 1.选中复制 这个比点击复制简单点 <template>   <div>     <el-button type=& ...

  7. CRC校验原理和verilog实现方法(二)

    1 前言 在 前面的博客  CRC校验原理和verilog实现方法(一)  中,介绍了CRC校验的原理和手动计算过程.本文说一下我在学习CRC校验FPGA实现的一点心得体会. 2 线性反馈移位寄存器 ...

  8. 用Python预测双色球福利彩票中奖号码(请不要当真)

    前言 双色球是中国福利彩票的一种玩法. 红球一共6组,每组从1-33中抽取一个,六个互相不重复.然后蓝球是从1-16中抽取一个数字,这整个组成的双色球 python从零基础入门到实战 今天,我们就用P ...

  9. 查看Android 系统发送的广播

    命令行输入如下命令 adb shell dumpsys |grep BroadcastRecord

  10. Windows协议 NTLM篇

    NTLM 基础 介绍 LM Hash & NTLM Hash Windows本身是不会存储明文密码的,只保存密码的hash 其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码 ...