Java进阶之--------集合2
回顾
做个小案例,使用ArrayList存储自定义对象并遍历
import java.util.*;public class ArrayListDemo{public static void main(String[] args){//创建ArrayList对象ArratList arraylist = new ArrayList();//创建学生对象Student s1 = new Student("范闲", 23);Student s2 = new Student("范思辙", 22);Student s3 = new Student("鸡腿菇凉", 20);Student s4 = new Student("范若若", 21);Student s5 = new Student("庆帝", 50);//将学生对象添加到集合中arrayList.add(s1);arrayList.add(s2);arrayList.add(s3);arrayList.add(s4);arrayList.add(s5);//遍历方式1:迭代器遍历 //获取迭代器Iterator iterator = arrayList.iterator();while(iterator.hasNext){Student s = (Student)iterator.next();System.out.println(s.getName() + "---" + s.getAge());//使用getset方法遍历数组for(int i = 0;i < arraylist.size();i++){Student student = (Student)arrayList.get(i);System.out.println(student.getName() + "---" + student.getAge()); }}
}//这是student类import java.util.Objects;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}'+"\n";}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&Objects.equals(name, student.name);}
}
去除集合中字符串的重复值(字符串的相同内容)
方式一:创建一个新的集合
public class ArrayListTest1{public static void main(String[] args){//创建旧集合对象ArrayList list = new ArrayList();//向集合中添加字符串元素list.add("hello");list.add("world");list.add("java");list.add("hadoop");list.add("hive");list.add("hello");list.add("spark");list.add("java");System.out.println("去重之前的集合为:"+List);//创建一个新的集合去保存去重后的元素ArrayList list2 = new ArrayList();//遍历旧的集合Interator interator = list.iterator();while(iterator.hasNext){String s = (String)iterator.next();//获取到元素后,拿着这个元素去新的集合里面去找,如果找到说明重复//如果没有找到,就添加到新集合中if(!list2.contains(s)){list2.add[s]}}System.out.println("去重后的集合为:"+list2);}
}
public class ArrayListTest2 {public static void main(String[] args) {ArrayList list = new ArrayList();Student s1 = new Student("Kayleigh", 18);Student s2 = new Student("kayle", 19);Student s3 = new Student("kaylele", 20);Student s4 = new Student("Kayleigh", 18);Student s5 = new Student("kaylaigh", 19);list.add(s1);list.add(s2);list.add(s3);list.add(s4);list.add(s5);System.out.println(list);System.out.println("================================");ArrayList list2 = new ArrayList();Interator interator = list.interator();while(interator.hasNext){Student s = (Student).interator.next();if(!list2.comtains(s)){list2.add(s);}}System.out.println(list2);}
}
来看LinkedList
LinkedList:底层数据结构为链表,查询慢,增删快线程不安全的,效率高LinkedList特有的功能:1、添加功能:void addFirst(Object obj) 在该列表开头插入指定的元素。void addLast(Object obj) 将指定的元素追加到此列表的末尾。等同于add()方法2、获取功能:Object getFirst() 返回此列表中的第一个元素。Object getLast() 返回此列表中的最后一个元素。3、删除功能:Object removeFirst() 从此列表中删除并返回第一个元素。Object removeLast() 从此列表中删除并返回最后一个元素。
public class LinkedListDemo1 {public static void main(String[] args) {//创建LinkedList集合对象LinkedList linkedList = new LinkedList();//添加元素到集合中linkedList.add("hello");linkedList.add("world");linkedList.add("java");linkedList.add("hadoop");linkedList.add("hive");linkedList.add("spark");System.out.println(linkedList);System.out.println("=======================================");//void addFirst(Object obj) 在该列表开头插入指定的元素。linkedList.addFirst("flink");System.out.println(linkedList);//void addLast(Object obj) 将指定的元素追加到此列表的末尾。linkedList.addLast("Hbase");System.out.println(linkedList);//Object getFirst() 返回此列表中的第一个元素。Object first = linkedList.getFirst();System.out.println(first);System.out.println(linkedList);//Object getLast() 返回此列表中的最后一个元素。Object last = linkedList.getLast();System.out.println(last);System.out.println(linkedList);//Object removeFirst() 从此列表中删除并返回第一个元素。Object o = linkedList.removeFirst();System.out.println(o);System.out.println(linkedList);//Object removeLast() 从此列表中删除并返回最后一个元素。Object o1 = linkedList.removeLast();System.out.println(o1);System.out.println(linkedList);}
}
请用LinkedList模拟栈数据结构的集合,并测试
栈的特点:先进后出题目的真正意思是,自己写一个类,底层是LinkedList,调用自己写的方法实现栈数据结构
public class LinkedListTest1{public static void main(String[] args){//创建集合LinkedList list = new LinkedList();//添加数据//linkedList.add("hello");
// linkedList.add("world");
// linkedList.add("java");linkedList.addFirst("hello");linkedList.addFirst("world");linkedList.addFirst("java");linkedList.addFirst("hadoop");//遍历Iterator it = list.iterator();while(it.hasNext()){Object next = iterator.next();System.out.println(next);}}
}//如果面试的时候,你按照上面的写法 0分
需求:现在有一个集合,集合中有些字符串的元素,我想判断一下里面有没有"bigdata"这个字符串如果有,我们就添加一个"yes"ConcurrentModificationException:并发修改异常当不允许这样的修改时,可以通过检测到对象的并发修改的方法来抛出此异常。原因:迭代器是依赖于集合存在的,在遍历遍历迭代器元素的时候,当我们判断成功后,,往集合中添加了一个元素,但是呢,迭代器这个时候并不知道已经添加了元素,所以就报错了。简单描述为:在迭代器遍历的时候,不能通过集合去修改元素。解决办法:1、迭代器遍历,迭代器修改2、集合遍历,集合修改
public class ListQuestion {public static void main(String[] args) {//创建一个集合对象List list = new ArrayList();list.add("hello");list.add("world");list.add("java");list.add("bigdata");list.add("hadoop");//获取迭代器对象
// Iterator iterator = list.iterator();// while (iterator.hasNext()){// String s = (String) iterator.next();
// if("bigdata".equals(s)){// list.add("yes");
// }
// }//迭代器遍历,迭代器修改
// ListIterator listIterator = list.listIterator();
// while (listIterator.hasNext()){// String s = (String) listIterator.next();
// if("bigdata".equals(s)){// listIterator.add("yes"); //在迭代器元素"bigdata"后面添加
// }
// }//集合遍历,集合修改for(int i=0;i<list.size();i++){String s = (String) list.get(i);if("bigdata".equals(s)){list.add("yes"); //在集合尾部添加}}System.out.println(list);}
}
Vector:底层数据结构是数组,查询快,增删慢线程安全的,效率低(虽然是线程安全的,以后我们也不使用它,后面会说一个线程安全的类替代它)Vector特有的方法:public void addElement(Object obj)将元素添加到集合的末尾 效果和add()一样public Object elementAt(int index)返回指定索引处的组件 get(int index)public Enumeration elements()返回此向量的组件的枚举
public class VectorDemo1 {public static void main(String[] args) {//创建Vector集合对象Vector vector = new Vector();//向集合中添加元素vector.addElement("hello");vector.add("world");vector.addElement("java");//public Object elementAt(int index)Object o = vector.elementAt(0);System.out.println(o);System.out.println(vector.elementAt(1));System.out.println(vector.elementAt(2));
// System.out.println(vector.elementAt(3));// System.out.println(vector.get(0));//public Enumeration elements()Enumeration elements = vector.elements();while (elements.hasMoreElements()){Object o1 = elements.nextElement();System.out.println(o1);}System.out.println("=====================================");System.out.println(vector);}
}
Java进阶之--------集合2相关推荐
- Java进阶之--------集合
集合 集合和数组很类似,都是一种容器,但是为什么我们学了数组还要学习集合呢?其实还是有很大差距的,我们先看一下数组和集合的不同点 区别: 集合和数组的不同点:1.数组的长度是不可变的,集合是可以改变2 ...
- Java 进阶:集合框架2
目录 一.List 接口 概述 List 接口中的抽象方法(特有) List 遍历 二.ListIterator 接口 1.概述 ListIterator 接口的抽象方法 List 逆向遍历: 三.迭 ...
- Java 自学路线图之 Java 进阶自学
文章目录 Java 自学路线图的第二阶段是 Java 语言进阶自学,在自学了第一阶段的 Java 基础自学后,大家对 Java 语言编程有了初步的了解和认识,建议在第一部分自学后整理一下自己的自学思路 ...
- JAVA进阶教学之(集合)
目录 1.集合概述 2.集合存储的数据类型 3.不同的集合,底层都会对应不同的数据结构 4.集合继承结构图(部分接口和类) 5.Collection接口中常用的方法 6.Collection 集合迭代 ...
- Java进阶,Set集合,Map集合
Java进阶,Set集合,Map集合 一.Set系列集合 1.Set系列集系概述 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍 ...
- 超仪电子 java面试_全靠这份阿里大佬的“Java进阶面试手册”助我收获蚂蚁金服offer!...
都2021年了,你的工资涨了吗? 对于即将到来的金三银四跳槽涨薪季,我想很多小伙伴都已经摩拳擦掌了吧!当然,我猜也有很多小伙伴是下图的状态吧!毕竟面试一年比一年难[落泪] 不得不说现在面试确实很难,现 ...
- Java进阶3. 内存回收机制
Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...
- Java进阶_3 注解、APT
Java进阶_3 注解.APT 一.注解的概念 注解(Annotation) 也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在 ...
- Java基础到Java进阶——Java小白的历练之路------从0到1,开卷!
Java小白的历练之路------从0到1 title: Java Essay date: 2022-09-07 08:58:32 tags: Java notes 写在前面: 免责声明:本笔记来源自 ...
最新文章
- html怎么设置取当前日期格式,js获取当前日期,格式为YYYY-MM-DD
- 现在的桥都会做仰卧起坐了!中国首座3D打印桥亮相上海
- AC日记——阶乘和 openjudge 1.6 15
- easypoi导出数值型_解决EasyPoi导出Excel金额数值类型
- linux修改文件打开最大数(ulimit命令)
- 用极大化思想解决最大子矩形问题
- 学Python就能做好数据分析?万能语言背后是一片韭菜地
- 求解简单的四则运算表达式
- jdbc批量执行SQL insert 操作
- win下使用curl
- Poi 为word 添加页眉 获取页眉
- 【数据科学】肯德尔等级相关系数( Kendall's tau coefficient )
- 计算机网络课程设计组建大型网吧局域网,计算机网络课程设计组建网吧局域网...
- python算库存管理_年终库存盘点怎么做?无代码库存管理系统高效率!
- 微信智能排号系统,哈林电子会员卡软件 微信智能排队系统 微排队系统源码
- 机器学习 入门详细解析(二)决策树、随机森林
- 有字符串“aabbcdbaaabc”用你熟悉的语言实现去除“ab”子串(正则方法)
- 聚类 k-means、yellowbrick和信用卡用户实例 -- 023
- 人脸识别 无法打开相机 笔记本_笔记本上的人脸识别怎么用?需要安装驱动吗?...
- 中文编程软件 - 习语言安装与使用入门