遍历集合的常见方式,排序,用lambda表示是怎样的
Collection集合的功能:
Object[] toArray() 将集合转成数组
Iterator iterator() 通过方法的调用 获取Iterator迭代器对象
// 遍历集合的常见方式
//方式1 Object[] toArray() 将集合转成数组
//普通for 循环 遍历集合 toArray()方法 将集合转成Object[]数组
Object[] arr = c.toArray();
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
Collection c2 = new ArrayList();
c2.add(new Student("王二麻子",20));
c2.add(new Student("赵四",40));
Object[] arr2 = c2.toArray();
for(int i=0;i<arr2.length;i++){
//向下转型
Student s = (Student)arr2[i];
System.out.println(s.getName());
}
//方式2 增强for循环
/*
格式
for(元素类型 变量名:要遍历的范围){
循环体语句
}
变量名 随便写
但是在增强for循环中 它代表的是当前遍历范围内的元素本身
缺点:
丢掉了索引
就不能根据索引获取元素了
*/
for(Object o:arr2){
System.out.println(o);//arr2[i] 元素本身
//向下转型
Student s = (Student)o;
System.out.println("增强for 循环:::::"+s.getName());
}
int[] arr3 ={1,2,3};
for(int x:arr3){
System.out.println(x);
}
迭代器:
public static void main(String[] args)
{
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
System.out.println(c);
c.add("qqq");
//Iterator iterator() 迭代器
Iterator it = c.iterator();
/*
boolean hasNext() 如果仍有元素可以迭代,则返回 true。
Object next() 返回迭代的下一个元素。
void remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
*/
//循环的结束条件是什么 hasNext()--> false 就结束
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
if("b".equals(obj)){//为了避免出现空指针异常 在使用equals进行比较时 建议将常量写在前面
//it.remove();
//c.remove("b");//ConcurrentModificationException 多线程并发访问异常
}
}
c.add("cccc");
c.remove("a");
System.out.println(c);
}
/*list
增
add(index,element)在指定位置添加元素 角标从0开始
addAll(index,Collection)
删
remove(index)删除指定位置的元素 角标从0开始
改
set(int index, E element) 修改指定位置的元素 角标从0开始
查
get(int index) 获取指定位置的元素
subList(int fromIndex, int toIndex)
*/
创建List 集合 存储Student对象 并对其进行排重处理
public static void main(String[] args)
{
//创建List 集合 存储Student对象 并对其进行排重处理
List list = new ArrayList();
list.add(new Student("张飞",30));
list.add(new Student("诸葛亮",40));
list.add(new Student("曹操",50));
list.add(new Student("诸葛亮",40));
System.out.println(list);
ArrayList newList = getSingle(list);
System.out.println(newList);
}
public static ArrayList getSingle(List list){
ArrayList al = new ArrayList();
Iterator it = list.iterator();
while(it.hasNext()){
Object obj = it.next();
if(!al.contains(obj)){//contains 包含 底层依托的是equals方法 Object类 默认equals方法比较的是地址值
al.add(obj);
}
}
return al;
}
}
student类中的contains 包含 底层依托的是equals方法 Object类 默认equals方法比较的是地址值
//重写 equals方法 比较属性是否相同 (不会看15)
public boolean equals(Object obj){
if(!(obj instanceof Student)){
return false;
}
Student stu = (Student)obj;
return this.name.equals(stu.name) && this.age == stu.age;
}
List集合特有的迭代器ListIterator
hasNext()
next()
注意 指针 先向后移动 再移动回来 单独写previous 获取不到数据 必须
先将指针向后移动 才能向前移动
hasPrevious()
previous()
//List集合特有的迭代器 ListIterator
List list = new ArrayList();
list.add(new Student("张三", 23));
list.add(new Student("李四", 24));
list.add(new Student("王五", 25));
for(int i=0;i<list.size();i++){
Student stu = (Student)list.get(i);
System.out.println(stu.getName()+",,,"+stu.getAge());
}
//ListIterator
ListIterator it = list.listIterator();
while(it.hasNext()){
Student stu = (Student)it.next();
System.out.println("ListIterator::::"+stu.getName());
if("张三".equals(stu.getName())){
it.add(new Student("赵四", 44));
}
}
System.out.println(list);
//注意 指针 先向后移动 再移动回来 单独写previous 获取不到数据 必须 先将指针向后移动 才能向前移动
while(it.hasPrevious()){
System.out.println("结果:"+it.previous());
}
}
Vector
Vector集合 底层是数组
Vector 和 ArrayList使用方法一样
遍历方式不同
Enumeration<E> elements()
枚举遍历 只能是Vector使用 高版本的List集合无法使用
实际开发中 使用近乎都是ArrayList
public static void main(String[] args) {
Vector v = new Vector();
v.addElement("c");
v.addElement("b");
v.addElement("a");
System.out.println(v);
/*
* 遍历集合 方式 使用枚举遍历
* */
Enumeration en = v.elements();
while(en.hasMoreElements()){
System.out.println(en.nextElement());
}
}
Set
排序(升序) 按照自然顺序排序 ASCII码表的顺序排序
TreeSet集合 如何给自定义数据类型进行排序?
第一种方式====我是方法===========
让自定义类 实现 public interface Comparable<T>接口
此接口强行对实现它的每个类的对象进行整体排序。
这种排序被称为类的自然排序,
类的 compareTo 方法被称为它的自然比较方法。
/*
* 返回:负整数、零或正整数,根据此对象是小于、等于还是大于指定对象
* 此对象 小于 指定对象 返回 负整数
* 此对象 等于 指定对象 返回 0
* 此对象 大于 指定对象 返回正整数
* */========我是方法==============
public int compareTo(Object o) {
// 此对象 this 和 指定对象Object进行比较 按照年龄排序
/*
* 返回:负整数、零或正整数,根据此对象是小于、等于还是大于指定对象
* 此对象 小于 指定对象 返回 负整数
* 此对象 等于 指定对象 返回 0
* 此对象 大于 指定对象 返回正整数
* */
Teacher t = (Teacher)o;//向下转型
//System.out.println(this.getAge()+","+this.getName()+",,"+t.getAge()+".."+t.getName());
if(this.getAge() < t.getAge()){
return -1;
}
if(this.getAge() == t.getAge()){
//equals
//String 类的 compareTo方法
//如果参数字符串等于此字符串,则返回值 0;
//如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;
//如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。
return this.getName().compareTo(t.getName());
//return 0;
}
return 1;
第二种方式=======我是方法================
让容器具备比较性
在创建TreeSet集合的同时 传入public interface Comparator<T>接口
重写 compare方法
强行对某个对象 collection 进行整体排序 的比较函数。
/*
* 参数:
o1 - 要比较的第一个对象。
o2 - 要比较的第二个对象。
返回:
根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
第一个参数 小于 第二个参数 返回 负整数
第一个参数 等于 第二个参数 返回 0
第一个参数 大于 第二个参数 返回 正整数
=============我是方法=====================
遍历集合的常见方式,排序,用lambda表示是怎样的的更多相关文章
- Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)
示例代码如下: package com.miracle.luna.lambda; import java.util.Arrays; /** * @Author Miracle Luna * @Date ...
- java里遍历map的常见方式
public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...
- Java List集合 遍历 四种方式(包含 Lambda 表达式遍历)
示例代码如下: package com.miracle.luna.lambda; import java.util.ArrayList; import java.util.List; /** * @A ...
- Java Map集合 遍历 五种方式(包含 Lambda 表达式遍历)
示例代码如下: package com.miracle.luna.lambda; import java.util.HashMap; import java.util.Iterator; import ...
- Java Array数组 遍历 四种方式(包含 Lambda 表达式遍历)
示例代码如下: package com.miracle.luna.lambda; import java.util.Arrays; /** * @Author Miracle Luna * @Date ...
- java8的lambda过滤list遍历集合,排序
1.根据属性过滤list List<AllManagerBean> testLists = broadCastRoomMapper.allManagerlist(); List<Al ...
- Lambda表达式遍历集合
1.Collection Java 8 为Iterable接口新增了一个forEach(Consumer action)默认方法,该方法所需参数的类型是一个函数式接口,而Iterable接口是Coll ...
- Java forEach 方式遍历集合(Java 8 新特性)
JDK 8 新增 forEach 方式遍历集合,这种方式比原来的 for each 循环还要简洁和便利. 需要注意:如果你计算机安装的是 JDK 8 以前的版本,是不支持 JDK 8 的新特性 Lis ...
- 集合遍历数组三种常用方式(Collecton和Map)
Collection集合遍历数组的三种方式: 迭代器 foreach(增强for循环) JDK1.8之后的新技术Lambda 迭代器: 方法:public Iterator inerator():获取 ...
随机推荐
- nodejs+vue.js+webpack
前端: nodejs+vue.js+webpack 后台:ssb(Spring+SpringMVC + mybatis-plus) 开发工具:idea 一.前提 1.安装nodejs 2.安装完nod ...
- JAVA Web期末项目第三阶段成果
我们做的系统是一个基于Java web与MySQL的食堂点餐系统 班级: 计科二班 小组成员:李鉴宣.袁超 项目的测试 在系统部署到云服务器之前,已经在本机上进行了部署测试,通过mvn打包生成war文 ...
- Jmeter接口之响应断言详解
响应断言 : 对服务器的响应进行断言校验 Apply to 应用范围: main sample and sub sample, main sample only , sub-sample only , ...
- Python 字符编码判断
题记 在获取中文字符的时候,如果出现乱码的情况,我们需要了解当前的字符串的编码形式.使用下面两种方法可以判断字符串的编码形式. 法一: isinstance(s, str) 用来判断是否为一般字符串 ...
- python自动化测试技术-Allure
文末有源码 大部分人可能做的是爬虫和web,数据分析方面的工作,今天分享个在自动化测试领域python能做什么样的事情,比如下方,是用python+pytest+allure生成的精美自动化测试报告, ...
- 刷金币全自动脚本 | 让Python每天帮你薅一个早餐钱(送源码)
刷金币全自动脚本 | 让Python每天帮你薅一个早餐钱(送源码) 测试开发社区 6天前 文章转载自公众号 AirPython , 作者 星安果 阅读文本大概需要 12 分钟. 1 目 标 场 景 ...
- Git常用的操作指令
修改最后一次提交 有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了.想要撤消刚才的提交操作,可以使用--amend 选项重新提交: 1 $ git commit --amend -m& ...
- 利用机器学习检测HTTP恶意外连流量
本文通过使用机器学习算法来检测HTTP的恶意外连流量,算法通过学习恶意样本间的相似性将各个恶意家族的恶意流量聚类为不同的模板.并可以通过模板发现未知的恶意流量.实验显示算法有较好的检测率和泛化能力. ...
- LeetCode python实现题解(持续更新)
目录 LeetCode Python实现算法简介 0001 两数之和 0002 两数相加 0003 无重复字符的最长子串 0004 寻找两个有序数组的中位数 0005 最长回文子串 0006 Z字型变 ...
- 【开发技巧】再见,BLE的那些坑!
蓝牙,平常你用的多吗?上班路上戴着蓝牙耳机听音乐.看视频打开蓝牙分享个人热点给小伙伴们解锁共享单车时,打开蓝牙就能迅速解锁...... BLE-蓝牙低能耗技术,方便了我们的生活,但是开发者在开发过程中 ...