【Java学习】LinkedList、ArrayLis列表的方法

2019-08-16  本文已影响0人  榆野铃爱

心得感悟

虽说今天只学了集合的方法,但真的想要吃透它,工程量还是很大的。上课时听着懵懵懂懂,后面自己又看了几次,再写完简书,才算是掌握了。有些东西的确就是回过头来看就简单很多了,学而不思则罔,思而不学则殆,如果思考很久都不理解,就等敲多了代码再回头看吧。


内容简概

具体内容

一、集合与数组的差异

区别 数组 集合
长度 不可变 可变
顺序 有序(角标) 无序(角标)
元素 可重复 不可重复
元素类型 只能放同种类型 可放不同类型

二、常见集合分类

在这里我们只讲几个常用的列表List,如下图①所示,其他方法如图②暂且不讲。

部分集合类型·图①
全部集合类型·图②
列表、集合和队列·图③

三、Collection的方法

1. 添加元素
2. 删除元素
3. 获取元素个数
4. 判断是否包含一个元素
5. 判断是否为空
6. 判断两个集合是否相同(比较内容)
7. 清空集合

        // 添加元素
         Collection<String> t1 = new ArrayList();
         t1.add("Jack");
         t1.add("Marry");

         //删除元素
         t1.remove("Jack");

         //获取元素个数
         System.out.println(t1.size());

         //判断是否包含一个元素
         if (t1.contains("Marry")) {
             System.out.println("有Marry");
         } else {
             System.out.println("没有Marry");
         }

         //判断是否为空
         if (t1.isEmpty()) {
             System.out.println("是空的");
         }

        //判断两个集合是否相同(比较内容)
         Collection<String> t2 = new ArrayList<>();
         t2.add("Marry");
         t2.add("Jack");
         t2.add("Rose");
         t2.add("Tom");

         if (t1.equals(t2)) {
             System.out.println("相同");
         } else {
             System.out.println("不相同");
         }

         //清空
         t1.clear();

四、Collection的遍历方法

1. Iterator遍历
2. for-each 增强的for循环 快速循环
3. for-i循环遍历

         Collection<String> t2 = new ArrayList<>();
         t2.add("Marry");
         t2.add("Jack");
         t2.add("Rose");
         t2.add("Tom");

        //Iterator遍历
        Iterator iterator = t2.iterator();
         while (iterator.hasNext()) {
             System.out.println(iterator.next());
         }
         while (iterator.next() != null){
             System.out.println(iterator.next());
         }

         //for-each 增强的for循环 快速循环
         for (String obj:t2){
             System.out.println(obj);
         }

         //for-i循环遍历
         for (int i = 0; i < t2.size(); i++){
             System.out.println(((ArrayList<String>) t2).get(i));
         }

五、ArrayList列表的方法

1. ArrayList<>的<>中只能放对象或者包装类

包装类:
在Java中不能定义基本数据类型对象,为了能将基本数据类型视为对象处理,并能连接相关方法,java为每个基本类型都提供包装类。

数据类型 boolean byte char short int long float double
包装类 Boolean Byte Char Short Integer Long Float Double

方法
1. 在末尾添加元素
2. 在指定位置添加元素
3. 访问指定元素
4. 修改一个元素
5. 删除指定位置元素
6. 删除指定对象
7. 清空集合

         ArrayList<Integer> score = new ArrayList<>();
         //在末尾添加元素
         score.add(3);
         //在指定位置添加元素
         score.add(0,1);

         //访问指定元素
         score.get(1);

         //修改一个元素
         score.set(0,0);

         //删除指定位置的元素
         score.remove(0);
         System.out.println(score);

         //删除指定的对象
         score.remove((Integer)2);
         System.out.println(score);

         //清空集合
         score.clear();

8. 将一个集合里面的内容添加到当前集合中
9. 取两个集合的交集
11. 访问某个对象在集合里面的索引
12. 将ArrayList转化为普通数组(toArray)
13. 遍历集合
14. 获取集合某个范围的子集合

         ArrayList<Integer> score = new ArrayList<>();
         ArrayList<Integer> a2 = new ArrayList<>();
         a2.add(1);
         a2.add(2);
         a2.add(3);

         //将一个集合里面的内容添加到当前集合中
         score.addAll(a2);

         ArrayList<Integer> a3 = new ArrayList<>();
         a3.add(1);
         a3.add(2);
         a3.add(1);

        a2.retainAll(a3);//取两个集合的交集
  
         //访问某个对象在集合里面的索引
         System.out.println(a3.indexOf(1));//第一次出现位置,无则返回-1
         System.out.println(a3.lastIndexOf(1));//最后一次出现的位置

         //将ArrayList转化为普通数组
         //法一:
         Integer[] objects = new Integer[a2.size()];
         a2.toArray(objects);
         for (Integer i: objects){
             System.out.println(i);
         }

         //法二:(不常用)
         Object[] objects1 = a2.toArray();
         for (Object i: objects1){
             System.out.print(i);
         }

         //遍历集合
         Iterator iterator1 = a2.iterator();
         while (iterator1.hasNext()){
             System.out.print(iterator1.next());
         }

         //获取集合某个范围的子集合
         List<Integer> integers = a2.subList(0,2);
         System.out.println(integers);*/
         //输出[1,2]

1. 概念
Lambda 表达式,也可称为闭包,使用 Lambda 表达式可以使代码变的更加简洁紧凑。

2. 格式
(parameters) -> expression 或 (parameters) ->{ statements; }
方法只有一个语句则不用大括号。

3. 简单例子

// 1. 不需要参数,返回值为 1
() -> 1
  
// 2. 接收一个参数(数字类型),返回其3倍的值  
x -> 3 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并打印
(String s) -> System.out.print(s)

4. 进阶版例子
求出数组里的单数

         ArrayList<Integer> nums = new ArrayList<>();
         nums.add(1);
         nums.add(2);
         nums.add(3);
         nums.add(4);

         //法一:(使用Lambda表达式)
         nums.removeIf(obj -> obj % 2 == 0);
         for (Integer obj:nums){
             if (obj % 2 == 0){
                 nums.remove(obj);
             }
         }

         //法二:(不使用Lambda表达式)
         for (int i = 0; i < nums.size(); i++){
             Integer obj = nums.get(i);
             if (obj % 2 == 0){
                 nums.remove(i);
                 i--;
             }
         }

因为我们常会用到for...i循环,而Java中又没有提供这个方法,故我们可以自己向软件中添加代码模板。在此示范Android studio的添加过程。

1.先敲出这样一段代码
2.对模板命名和编写提示
3.点击确认
4.再次编写时,就可看到自己创建的模板
效果如图,不用敲3次循环变量真的很方便
上一篇 下一篇

猜你喜欢

热点阅读