java 集合
来源:互联网 发布:java list方法 编辑:程序博客网 时间:2024/06/05 07:26
泛型
优点:1,增加代码安全性
2,省去强制转换的麻烦
3,泛形可以将运行时的错误在编译时发现
数组保存字符串泛型实例
ArrayList<String> list = new ArrayList<String>();list.add("B");list.add("a");list.add("c");list.add("s");ListIterator<String> listiterator = list.listIterator();//正相遍历while(listiterator.hasNext()) {String next = listiterator.next();System.out.println(next);}//逆向遍历while(listiterator.hasPrevious()) {String previous = listiterator.previous();System.out.println(previous);}
在jdk 1.7 菱形泛型
//后面的泛型可以不写,如不写默认与声明泛型一致,写的话前后须一致
//遍历int 数组的方法//public static void print (int[] array) {////}//int...相当于数组int[]//下列方法还能不能添加int 类型的参数//注意,如果多参数,那么int...放到最后public static void print (int x , int ... num) {for (int i = 0; i < num.length; i++) {System.out.println(i);}}
数组转list可使用方法aslist
int[] array = {1,2,3,4,5};//List<int[]> asList = Arrays.asList(array);//System.out.println(asList);////直接使用基本数据类型包装类//Interger[] newArray = {1,2,3,4,5};//List<Integer> asList2 = Arrays.asList(newArray);这里把整个数组当做一个元素存到集合中
这时因为集合中只能保存对象类型,致使数组无法自动装箱
所以数组转化为集合,不能对其做增加或删除的操作
但可以使用集合中的其他方法
泛型通配符
? extends E ?是子类 E是父类
向下限定,只允许往下继承,如子类,zizi类
? super E 向上继承
集合的三种删除方式
public static void fun1() {//遍历集合ArrayList<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("b");list.add("c");list.add("s");for (int i = 0; i < list.size(); i++) {//如果集合中有b,删除if(list.get(i).equals("b")) {//i-- 保证每次删除后,角标能够回调,为不会少元素//保证删除后依然遍历数组每一个元素list.remove(i--);}System.out.println(list.get(i)); }}
使用迭代器删除
//迭代器删除ArrayList<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("b");list.add("c");list.add("s"); Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {String next = iterator.next();if(next.equals("b")) {//这里调用迭代器方法remove删除,否则会发生并发报错//如果要添加元素 ,使用listiterator迭代iterator.remove();}}}
ist<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("b");list.add("c");list.add("s");//遍历//冒号后是你要遍历的容器//冒号前是你要遍历的容器中每一个元素//增强for循环底层是用迭代器实现的//一般只用来打印,无法作删除的操作for(String str:list) {System.out.println(str);}}
集合的排序
//创建一个数组,保存5个学生,把学生按年龄排序
核心就是比较和交换,可使用冒泡排序和选择排序
ArrayList<Student> list = new ArrayList<>();list.add(new Student("ss",14));list.add(new Student("dd",12));list.add(new Student("gg",13));list.add(new Student("mm",11));list.add(new Student("xx",17));for (int i = 0; i < list.size()-1; i++) {for (int j = 0; j < list.size()-1-i; j++) {//核心比较和交换//取出要比较的两个学生Student s1 = list.get(j);Student s2 = list.get(j+1);if(s1.getAge() < s2.getAge()) {Student temp = s1;list.set(j,s2);list.set(j+1, temp);Collections.swap(list,j,j+1);}}}System.out.println(list);}
按姓名排序
list1.add(new Student("ss",14));list1.add(new Student("dd",12));list1.add(new Student("gg",13));list1.add(new Student("mm",11));list1.add(new Student("xx",17));for (int i = 0; i < list1.size()-1; i++) {for (int j = 0; j < list1.size()-1-i; j++) {Student s1 = list1.get(j);Student s2 = list1.get(j+1);if(s1.getName().compareTo(s2.getName())> 0) {Student temp = s1;list1.set(j,s2);list1.set(j+1, temp);}}}
也可以选择调用系统的方法
collections 的 sort() 方法
此方法是系统提供的排序方法
但是缺失排序规则
系统提供了写排序规则的接口,由你去实现此接口(回调思想)
数组里放的什么对象,就由该对象去实现这个接口
使用collections 中sort() 实现排序步骤
1,让集合中被排序对象的类,去实现接口 Comparable
2,实现接口中的抽象方法(方法重写)
3,编写排序规则
4,调用Collection.sort()测试.
ArrayList<Student> list = new ArrayList<>();list.add(new Student("ss",14));list.add(new Student("dd",12));list.add(new Student("gg",13));list.add(new Student("mm",11));list.add(new Student("xx",17));Collections.sort(list);
对象实现接口部分
public class Student extends Person implements Comparable<Student>{public Student() {}public Student(String name, int age) {// TODO Auto-generated constructor stubsuper(name,age);}//Comparable接口中抽象方法//这个有你来写排序规则@Overridepublic int compareTo(Student o) {//返回0,两个值相等//返回正数,前面的大//返回副数,后面的大return this.getAge() - o.getAge();//按学生姓名牌//这个compareTo是字符串的方法//return this.getName().compareTo(o.getName());}}
集合的嵌套
public static void main(String[] args) {//一个java学科,有两个班,每个班里有俩学生ArrayList<ArrayList<Student>>subjects = new ArrayList<>();ArrayList<Student> classes1 = new ArrayList<>();classes1.add(new Student("sdf",23));ArrayList<Student> classes2 = new ArrayList<>();classes2.add(new Student("sdfs",22));subjects.add(classes1);subjects.add(classes2);for(ArrayList<Student> classes: subjects) {for(Student student: classes) {System.out.println(student);}}}
阅读全文
1 0
- Java集合:集合框架
- java集合---set集合
- JAVA 集合 的 集合
- 【集合】Java集合对比
- JAVA集合-Map集合
- JAVA集合-Set集合
- JAVA集合-List集合
- java集合------Map集合
- Java集合----List集合
- Java集合----Set集合
- Java集合----Map集合
- JAVA集合
- JAVA集合
- Java集合
- JAVA集合
- Java集合
- Java集合
- java 集合
- numpy数组切片操作
- coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习
- 迭代器模式
- Android 7.1 GUI系统-窗口管理WMS-动画的执行(七)
- 重识java7
- java 集合
- [Leetcode] 531. Lonely Pixel I 解题报告
- A Little Java, A fewer Patterns
- CMake入门
- bootstrap CSS概述
- MacBook Pro 链接无线Wi-Fi网络问题(Wi-Fi正常打开,无法连接路由器)
- 吴恩达深度学习笔记之卷积神经网络(目标检测)
- visual studio编写C#代码时“未能从程序集.....中加载类型”和“找不到方法”的一种可能的解决办法
- 如何通过git将项目推送到github远程仓库