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);}}}


原创粉丝点击