欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用

程序员文章站 2024-03-17 17:53:52
...

Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用
Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用 Collection - 集合 Iterator - 迭代器 Revise — 修改(rɪˈvaɪz)

**

1. 一/Collection集合的创建与应用

Collection本身是个接口,那么如果要把它以集合形式去应用,那么就需要用到多态.而子类则必须是个集合实现类,比如ArrayList.
格式:Collection<E泛型> 多态集合对象自定义名 = new ArrayList<E>();
如:Collection<String> collectionListObj = new ArrayList<String>();

常用方法:
1/对象名.add(); 添加元素
2/对象名.remove(); 删除指定元素,因为没有索引值,所以如果存在多个相同元素,则删除最靠前的.
3/对象名.isEmpty(); 判断集合中的元素是否全部为空内容元素,如果是则True,不是则False
4/对象名.contains(); 判断指定元素是否存在集合中
5/对象名.clear(); 清空所有元素(即将所有元素内容清空)
6/对象名.size(); 取集合长度

public static void main(String[] args) {

        Collection<String> collectionListObj = new ArrayList<String>();

        //元素添加,注意要用重写了接口的'add'方法,而不是ArrayList独有的'add'方法.
        collectionListObj.add("世界大同");
        collectionListObj.add("华夏归真"); //最靠前
        collectionListObj.add("炎黄子孙");
        collectionListObj.add("华夏归真");
        collectionListObj.add("华夏归真");
        System.out.println(collectionListObj);//此处说明ArrayList自身或者它所继承直接/间接父类重写了Object的'toString'方法.

        //从集合中删除元素,如果有同该元素相同的,则删除最靠前的元素.
        collectionListObj.remove("华夏归真");
        System.out.println(collectionListObj);
        System.out.println("========================");
        //判断集合中是否存在指定元素
        System.out.println(collectionListObj.contains("世界大同") );//存在则返回True,不存在返回False
        System.out.println("========================");

        //判断集合中的元素是否为空
        System.out.println(collectionListObj.isEmpty()); //是则True,不是则False
        System.out.println("========================");

        //取集合元素长度
        System.out.println(collectionListObj.size());
        System.out.println("========================");

        //清空集合中的所有元素
        collectionListObj.clear();
        System.out.println(collectionListObj);
        System.out.println("========================");
}

2. 二/Collection迭代器 Iterator 的应用:

 格式:`terator<E泛型> Iterator迭代器对象名 = 多态集合对象自定义名.iterator();`
 如: `Iterator<String> it = collectionListObj.iterator();`
     此处左侧'Iterator'的泛型,必须同多态集合对象的泛型一致.

2.2. 应用1/历遍元素内容:

1/调用元素内容格式:Iterator迭代器对象名.next()
    规则:尽管多态集合没有索引值,但也会依照{隐性的}元素索引值从0到末尾.但正因为没有索引值,所以每调用一次,都会依照顺序从0到末尾调用.
         所以假如这里头有4个元素,那么就需要对这个方法调用4次.
         如果调用次数超过了元素数量,那么就会报错
  2/判断是否调用次数超过了元素数量之格式:Iterator迭代器对象名.haxNext()
public static void main(String[] args) {
Collection<String> collectionListObj = new ArrayList<String>();

        collectionListObj.add("世界大同");
        collectionListObj.add("华夏归真");
        collectionListObj.add("炎黄子孙");
        collectionListObj.add("华夏归真");
        collectionListObj.add("华夏归真");

        //通过collectionList的多态对象的发给发'iterator()'来创建迭代器'Iterator'.
        Iterator<String> it = collectionListObj.iterator();

        System.out.println(it.next());//世界大同
        System.out.println("========================");
        while (it.hasNext()){ //判断是否历遍到了末尾.
            String stringParam = it.next();  //必须保证循环历遍体内,其元素调用方法只能是一个.
            //  华夏归真
            //     炎黄子孙
            //      华夏归真
            //      华夏归真
            System.out.println(stringParam);
        }

        System.out.println("========================");
        }

注意:1/如果想要用while等循环以历遍的形式完成某些操作的话,必须要保证在循环体内,历遍方法(如next())只能被使用一次,否则将会造成调用顺序出错.
因此强烈建议以 '类型 变量名 = it.next()'的形式进行左侧赋值调用,以此来保证循环体对其历遍方法只调用一次.
2/在历遍循环体内,不允许改变数组长度(如add方法的增加元素,和remove的删除元素),否则报错.
3/在同一个方法下,那么其历遍顺序不会被初始化,也就是说,
如果在同一个方法内的循环体外用next调用了一次元素内容,那么在同一个方法的遍历循环体内又一次调用元素内容时,则直接从上一次的隐性索引值开始调用.
4/因为在JDK5之后有了增强版For循环,如果仅仅只是想要用历遍功能,那完全可以替代本迭代器.
Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用

3. 三/List的讲解与应用:

Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用
格式:List<泛型> List集合自定义多态对象名 = new ArrayList<>();
列如:List<String> listStringObj = new ArrayList<>();
意义:List的方法用法同Arraylist差不多,但List是一个接口,并且继承了集合父类的’Collection’接口,
因此需要以多态形式创建,子类大多为实现了它的实现类,比如ArrayList.

public class newList {
    public static void main(String[] args) {
//===============================================默认迭代器的应用=========================================
        List<Student> ListStudentObj = new ArrayList<>();

        Student studentObj = new Student("赵丽颖-", 23);
        Student studentObjTwo = new Student("张天爱-2", 25);
        Student studentObjThree = new Student("迪丽热巴-3", 22);


        ListStudentObj.add(studentObj);
        ListStudentObj.add(studentObjTwo);
        ListStudentObj.add(studentObjThree);
 }
 //创建内部学生类,并重写toString.

class Student {
    private String name;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", 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;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    private int age;


}

4. 四/List迭代器 Listiterator 的应用

Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用
Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用
创建:以多态形式创建,其中的泛型要与List集合对象的多态泛型要一致.

 格式:ListIterator<泛型> 自定义List迭代器对象名 = List集合自定义多态对象名.listIterator();
 列如:ListIterator<String> listIteratorObj = listStringObj.listIterator();

意义:与Collection的迭代器不同, List的迭代器’ListIterator’可以在遍历的集合的过程中去通过’add’或’remove’方法来改变集合的长度,并且不会报错.
但是这个’add’或’remove’方法必须通过List的迭代器’ListIterator’来调用.

4.1. 应用1/正向遍历集合内容,并中改变集合长度

方法:listIteratorObj.hasNext() listIteratorObj.next()

 格式: 
while(自定义List迭代器对象名.hasNext()) {
            自定义List迭代器对象名.add/remove(元素);
            System.out.println(自定义List迭代器对象名.next());
        }
 列如:   
while (listIteratorObj.hasNext()) {
            if (num == 2) {
                listIteratorObj.add("中国人");
                num = 0;
            }
            System.out.println(listIteratorObj.next());
        }
        
public class newList {
    public static void main(String[] args) {
 List<String> listStringObj = new ArrayList<>();
        listStringObj.add("你好");
        listStringObj.add("世界!");
        listStringObj.add("团结");
        listStringObj.add("博爱");
        ListIterator<String> listIteratorObj = listStringObj.listIterator();
         //遍历元素内容
        //正向遍历对象内容
        //与Collection的迭代器不同,    List的迭代器'ListIterator'可以在遍历的集合的过程中去通过'add'或'remove'方法来改变集合的长度,并且不会报错.
        //但是这个'add'或'remove'方法必须通过List的迭代器'ListIterator'来调用.
        int num = 2;
        while (listIteratorObj.hasNext()) {
            if (num == 2) {
                listIteratorObj.add("中国人");  //中途可以改变长度
                num = 0;
            }
            System.out.println(listIteratorObj.next());
        }
      }
   }   
        class Student {
    private String name;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", 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;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    private int age;


}

4.2. 应用2/逆向历遍集合内容(也可以中途改变集合长度)

注意:无论是在Collection集合的迭代器,还是在List集合的迭代器中,初始的迭代指针都是默认指向第一个隐性索引值.
也因为不存在显性索引值,直接从从最后一个元素开始逆行遍历.所以在这种情况下**,需要先通过正向遍历,使其指向最后一个索引值,进而才能逆向遍历.**
格式:

while(自定义List迭代器对象名.hasPrevious()){
             System.out.println(自定义List迭代器对象名.previous())
           }
           

列如:

while (listIteratorObj.hasPrevious()) {
        System.out.println(listIteratorObj.previous());
    }
public class newList {
    public static void main(String[] args) {
 List<String> listStringObj = new ArrayList<>();
        listStringObj.add("你好");
        listStringObj.add("世界!");
        listStringObj.add("团结");
        listStringObj.add("博爱");
        ListIterator<String> listIteratorObj = listStringObj.listIterator();
     
       
        //正向遍历对象内容
        int num = 2;
        while (listIteratorObj.hasNext()) {
            if (num == 2) {
                listIteratorObj.add("中国人");  //中途可以改变长度
                num = 0;
            }
            System.out.println(listIteratorObj.next());
        }
     //[逆向历遍

        while (listIteratorObj.hasPrevious()) {
            System.out.println(listIteratorObj.previous());
        }
      }
   }   
        class Student {
    private String name;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", 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;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    private int age;


}

注意2:因为在JDK5之后有了增强版For循环,如果仅仅只是想要用历遍功能,那完全可以替代本迭代器.

5. 五/增强For{多用}

Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用
增强for循环.
它的本质其实还是一个Collection的iterator迭代器(并非是list的iterator的迭代器),这意味这并不能在遍历时改变长度,
只是因为声明定义一个iterator的过程较为繁琐,因此在jdk5之后,出现了一个"增强For"来优化过程繁琐的问题.
它在日后的开发过程中使用频率极高. 同时正因为它的内核是一个iterator迭代器,所以它可以对任何数据或集合进行循环.
使用快捷键:iter+回车

格式:

 for (数组类型/集合泛型 进步表达式变量 : 要被循环的数据/集合){

        //循环体

   }

注意:因为在JDK5之后有了增强版For循环,如果仅仅只是想要用历遍功能,那完全可以只用这个即可.

public class newList {
    public static void main(String[] args) {
   ArrayList<String> stringArrayList = new ArrayList<>();
        stringArrayList.add("中华");
        stringArrayList.add("炎黄");
        stringArrayList.add("春秋");
        stringArrayList.add("复兴");
        //遍历String集合
        for (String s : stringArrayList) {
            System.out.println(s);
        }
        System.out.println("======================");
        //遍历String数组
        String[] stringArray = {"爱国", "敬业", "*", "奋斗"};
        for (String s : stringArray) {
            System.out.println(s);
        }
        System.out.println("======================");
        //遍历int数组
        int[] intArray = {12, 214, 4323, 121, 213};
        for (int i : intArray) {
            System.out.println(i);
        }
        System.out.println("======================");
        }
  }      

6. 三种遍历的应用

public class newList {
    public static void main(String[] args) {
     String[] ergodic = {"あ", "い", "う", "え", "お"};

        //索引值遍历
        for (int i = 0; i < ergodic.length; i++) {
            System.out.println(ergodic[i]);
        }
        System.out.println("======================");

        //迭代器遍历 ListIterator或Iterator
        List<String> listStringergodic = new ArrayList<>();
        listStringergodic.add("あ");
        listStringergodic.add("い");
        listStringergodic.add("う");
        listStringergodic.add("え");
        listStringergodic.add("お");
        ListIterator<String> listIteratorErgodic = listStringergodic.listIterator();

        while (listIteratorErgodic.hasNext()) {
            System.out.println(listIteratorErgodic.next());
        }
        System.out.println("======================");

        //增强版For遍历{多用}
        for (String s : ergodic) {
            System.out.println(s);
        }
        System.out.println("======================");
        }
   }     

7. List集合的两大分支ArrayList和LinkedList(了解下就行)

Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用

相关标签: JAVA