博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java编程基础17——集合(List集合)
阅读量:5893 次
发布时间:2019-06-19

本文共 16524 字,大约阅读时间需要 55 分钟。

1_(去除ArrayList中重复字符串元素方式)*

  • A:案例演示

    • 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)
    • 思路:创建新集合方式
import java.util.ArrayList;import java.util.Iterator;public class ArrayList_1_demo {    /* 创建新集合将重复元素去掉    * 1.明确返回值类型,返回ArrayList    * 2.明确参数列表ArrayList    * */    public static void main(String[] args) {        ArrayList list = new ArrayList();        list.add("a");        list.add("a");        list.add("b");        list.add("c");        list.add("d");        list.add("c");        list.add("b");                ArrayList newList = getSingle(list);        System.out.println(newList);    }        public static ArrayList getSingle(ArrayList list) {        ArrayList newList = new ArrayList();            //1.创建新集合        Iterator it = list.iterator();                //2.根据传入的集合(老集合)获取迭代器                while(it.hasNext()) {                //3.遍历老集合            Object obj = it.next();            //4.临时记录每一个元素            if(!newList.contains(obj)) {    //5.如果新集合中不包含老集合中的元素                newList.add(obj);            //6.将新元素添加到新集合中            }        }        return newList;                        //7.将新集合返回    }}

2_(去除ArrayList中重复自定义对象元素)*

  • A:案例演示

    • 需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)
  • B:注意事项

    • 重写equals()方法的

      • contains方法判断是否包含,底层依赖的是equals方法
      • remove方法判断是否删除,底层依赖的是equals方法
import java.util.ArrayList;import java.util.Iterator;import net.allidea.bean.Person;@SuppressWarnings({ "rawtypes", "unchecked" })public class ArrayList_2_demo {    public static void main(String[] args) {        ArrayList list = new ArrayList();            //创建集合对象        list.add(new Person("张三",23));        list.add(new Person("李四",24));        list.add(new Person("张三",23));        list.add(new Person("张三",23));        list.add(new Person("王五",23));        list.add(new Person("李四",24));        //        ArrayList newList = getSingle(list);            //调用方法去除重复//        System.out.println(newList);        list.remove(new Person("张三",23));        System.out.println(list);    }    public static ArrayList getSingle(ArrayList list) {        ArrayList newList = new ArrayList();            //1.创建新集合        Iterator it = list.iterator();                //2.根据传入的集合(老集合)获取迭代器                while(it.hasNext()) {                //3.遍历老集合            Object obj = it.next();            //4.临时记录每一个元素            if(!newList.contains(obj)) {    //5.如果新集合中不包含老集合中的元素                newList.add(obj);            //6.将新元素添加到新集合中            }        }        return newList;                        //7.将新集合返回    }}
@Override//重写equals方法    public boolean equals(Object obj) {        Person p = (Person)obj;        return this.name.equals(p.name) && this.age == p.age;    }

3_(LinkedList的特有功能)*

  • A:LinkedList类概述
  • B:LinkedList类特有功能

    • public void addFirst(E e)及addLast(E e)
    • public E getFirst()及getLast()
    • public E removeFirst()及public E removeLast()
    • public E get(int index);
import java.util.LinkedList;public class ArrayList_3_LinkedList {    public static void main(String[] args) {        LinkedList list = new LinkedList();        list.addFirst("a");        list.addFirst("b");        list.addFirst("c");        list.addFirst("d");//在头部添加        list.addLast("e");//在尾部添加        //        System.out.println(list.getFirst());//打印头部元素//        System.out.println(list.getLast());//打印尾部元素//        System.out.println(list.removeFirst());//删除头//        System.out.println(list.removeLast());//删除尾        System.out.println(list.get(1));        System.out.println(list);    }}

4_(栈和队列数据结构)*

    • 先进后出 (装子弹原理)
  • 队列

    • 先进先出(水龙头原理)

5_用LinkedList模拟栈数据结构的集合并测试*

  • A:案例演示

    • 需求:请用LinkedList模拟栈数据结构的集合,并测试
    • 创建一个类将Linked中的方法封装
import java.util.LinkedList;import java.util.Stack;public class ArrayList_4_LinkedList {    public static void main(String[] args) {//        demo1();        stack s = new stack();            //进栈        s.in("a");        s.in("b");        s.in("c");        s.in("d");                while(!s.isEmpty()) {            //是否为空            System.out.println(s.out());//弹栈        }    }    private static void demo1() {        LinkedList list = new LinkedList();        list.addLast("a");        list.addLast("b");        list.addLast("c");        list.addLast("d");        /*        System.out.println(list.removeLast());        System.out.println(list.removeLast());        System.out.println(list.removeLast());        System.out.println(list.removeLast());*/                while (!list.isEmpty()) {                    System.out.println(list.removeLast());        }    }}
import java.util.LinkedList;public class stack {    private LinkedList list = new LinkedList();        //模拟进栈方法    public void in(Object obj) {        list.addLast(obj);    }        //模拟出栈方法    public Object out() {        return list.removeLast();    }        //模拟栈结构是否为空    public boolean isEmpty() {        return list.isEmpty();    }}

6_泛型概述和基本使用*

  • A:泛型概述
  • B:泛型好处

    • 提高安全性(将运行期的错误转换到编译期)
    • 省去强转的麻烦
  • C:泛型基本使用

    • <>中放的必须是引用数据类型
  • D:泛型使用注意事项

    • 前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)
import java.util.ArrayList;import java.util.Iterator;import net.allidea.bean.Person;public class Generic_1_demo {        public static void main(String[] args) {//        demo1();//        int[] arr = new byte[5];                                //数组要保证前后的数据类型一致//        ArrayList list = new ArrayList
(); //集合泛型也要保证前后的数据类型一致// ArrayList
list = new ArrayList<>(); //1.7版本新特性,菱形泛型 ArrayList list = new ArrayList<>(); //泛型不定义Object,没有意义 list.add("aaa"); list.add(true); list.add(new Person("张三",23)); } private static void demo1() { ArrayList
list = new ArrayList
();// list.add(100);// list.add(true); list.add(new Person("张三",23)); list.add(new Person("李四",24)); Iterator
it = list.iterator(); while(it.hasNext()) {// System.out.println(it.next()); //next()方法只能调用一次,如果调用多次会将指针向后移动多次// System.out.println(it.next().getName() + "..." + it.next().getAge()); Person p = it.next(); //向下转型 System.out.println(p.getName() + "..." + p.getAge()); } }}

7_ArrayList存储字符串和自定义对象并遍历泛型版*

  • A:案例演示

    • ArrayList存储字符串并遍历泛型版
import java.util.ArrayList;import java.util.Iterator;import net.allidea.bean.Person;public class Generic_2_demo     public static void main(String[] args) {//        demo1();        demo2();    }    private static void demo2() {        ArrayList
list = new ArrayList<>(); list.add(new Person("张三",23)); list.add(new Person("李四",24)); list.add(new Person("王五",25)); list.add(new Person("赵六",26)); Iterator
it = list.iterator(); while(it.hasNext()) { Person p = it.next(); //将集合中的每一个元素用Person记录 System.out.println(p.getName() + "..." + p.getAge()); } } private static void demo1() { ArrayList
list = new ArrayList(); //创建集合对象 list.add("a"); list.add("b"); list.add("c"); list.add("d"); Iterator
it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } }}

8_泛型的由来(了解)

  • A:案例演示

    • 泛型的由来:通过Object转型问题引入
    • 早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。
import net.allidea.bean.Animal;        //Animal 继承 Person及其构造import net.allidea.bean.Person;        //Person private String name;private int age;import net.allidea.bean.Tool;        //Tool 自定义类private Object obj;import net.allidea.bean.Worker;        //Worker 继承 Person及其构造public class Generic_3_demo {    public static void main(String[] args) {        Tool t = new Tool();        //创建工具类对象        t.setObj(new Animal("张三",23));        Worker w = (Worker)t.getObj();        //向下转型        System.out.println(w);    }}

9_泛型类的概述及使用(了解)

  • A:泛型类概述<T>

    • 把泛型定义在类上
  • B:定义格式

    • public class 类名<泛型类型1,…>
  • C:注意事项

    • 泛型类型必须是引用类型
  • D:案例演示

    • 泛型类的使用
import net.allidea.bean.Animal;        //Animal 继承 Person及其构造import net.allidea.bean.Person;        //Person private String name;private int age;import net.allidea.bean.Tool;        //Tool 自定义类private Object obj;import net.allidea.bean.Worker;        //Worker 继承 Person及其构造public class Generic_3_demo {    public static void main(String[] args) {        Tool
t = new Tool<>(); //创建工具类对象 t.setObj(new Animal("张三",23));// Worker w = (Worker)t.getObj(); //报错// System.out.println(w); }}
//Tool文件package net.allidea.bean;public class Tool {    //E代表元素    private Q q;    public Q getObj() {        return q;    }    public void setObj(Q q) {        this.q = q;    }}

10_泛型方法的概述和使用(了解)

  • A:泛型方法概述

    • 把泛型定义在方法上
  • B:定义格式

    • public <泛型类型> 返回类型 方法名(泛型类型 变量名)
  • C:案例演示

    • 泛型方法的使用
import net.allidea.bean.Animal;        //Animal 继承 Person及其构造import net.allidea.bean.Tool;        //Tool 自定义类private Object obj;public class Generic_3_demo {    public static void main(String[] args) {        Tool
t = new Tool<>();// t.show("abc"); t.show(true); //无类型,自动装箱 }}
package net.allidea.bean;public class Tool {    //E代表元素    private Q q;    public Q getObj() {        return q;    }    public void setObj(Q q) {        this.q = q;    }        public
void show(T t) { //方法泛型需要与类的泛型一致 System.out.println(t); //如果不一致,需要在方法上声明该类型 } public static
void print(Q q) { //静态方法必须声明自己的泛型,加载早此Q非彼Q System.out.println(q); }}

11_泛型接口的概述和使用(了解)

  • A:泛型接口概述

    • 把泛型定义在接口上
  • B:定义格式

    • public interface 接口名<泛型类型>
  • C:案例演示

    • 泛型接口的使用
package net.allidea.Generic;public class Generic_4_demo {        public static void main(String [] args) {                }}interface Inter
{ //接口泛型 public void show(T t); //抽象方法}/*class Demo implements Inter
{ //第一种方式实现接口泛型,推荐 @Override public void show(String t) { //重写抽象方法 System.out.println(t); }}*/class Demo
implements Inter
{ //没有必要再实现接口的时候,给自己类加泛型 @Override public void show(T t) { System.out.println(t); }}

12_(泛型高级之通配符)(了解)

  • A:泛型通配符<?>

    • 任意类型,如果没有明确,那么就是Object以及任意的Java类了
  • B:? extends E

    • 向下限定,E及其子类
  • C:? super E

    • 向上限定,E及其父类
import java.util.ArrayList;import java.util.List;import net.allidea.bean.Person;import net.allidea.bean.Animal;public class Generic_5_demo {    public static void main(String[] args) {//        List
list = new ArrayList
(); //当右边泛型是不确定时,左边可以指定为? ArrayList
list1 = new ArrayList<>(); list1.add(new Person("张三",23)); list1.add(new Person("李四",24)); list1.add(new Person("王五",25)); ArrayList
list2 = new ArrayList<>(); list2.add(new Animal("赵六",26)); list2.add(new Animal("田七",27)); list1.addAll(list2); //Animal继承Person System.out.println(list1); }}

13_增强for的概述和使用*

  • A:增强for概述——简化数组和Collection集合的遍历
  • B:格式:
for(元素数据类型 变量 : 数组或者Collection集合) {            使用变量即可,该变量就是元素        }
  • C:案例演示——数组,集合存储元素用增强for遍历
  • D:好处——简化遍历
import java.util.ArrayList;public class Foreach_1_demo {    public static void main(String[] args) {        int[] arr = {11,22,33,44,55,66};        for(int i : arr) {            System.out.println(i);        }        ArrayList
list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); for (String string : list) { System.out.println(string); } }}

14_ArrayList存储字符串和自定义对象并遍历增强for版 *

  • ArrayList存储字符串并遍历增强for版
  • 增强for循环底层依赖的是迭代器(Iterator)
public static void main(String[] args) {        ArrayList
list = new ArrayList<>(); list.add(new Person("张三",23)); list.add(new Person("李四",24)); list.add(new Person("王五",25)); list.add(new Person("赵六",26)); list.add(new Person("田七",27)); for (Person person : list) { System.out.println(person); } }

15_三种迭代的能否删除*

  • 普通for循环,可以删除,但是索引要--
  • 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
  • 增强for循环不能删除
public static void main(String[] args) {        ArrayList
list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("d"); list.add("b"); //普通for循环删除,索引要-- /*for (int i = 0; i < list.size(); i++) { if("b".equals(list.get(i))) { list.remove(i--); //通过索引删除元素 } }*/ //迭代器删除 /*Iterator
it = list.iterator(); while(it.hasNext()) { if("b".equals(it.next())) {// list.remove("b"); //不能用集合的删除方法,会报并发修改异常 it.remove(); } }*/ /*for(Iterator
it2 = list.iterator(); it2.hasNext();) { if("b".equals(it2.next())) { it2.remove(); } }*/ //增强for循环,不能删除,只能遍历 for (String String : list) { if("b".equals(String)) { list.remove("b"); } } System.out.println(list); }

16_静态导入的概述和使用(了解)

  • A:静态导入概述

    • 静态导入时导入类中的静态方法;
  • B:格式:

    • import static 包名….类名.方法名;
    • 可以直接导入到方法的级别
  • C:注意事项

    • 方法必须是静态的,如果有多个同名的静态方法,容易不知道使用谁?
这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。
import static java.util.Arrays.sort;import static java.util.Arrays.*;public class StaticImport_2_demo {            public static void main(String[] args) {        int[] arr = {11,33,55,66,99,44};        sort(arr);            //排序        System.out.println(Arrays.toString(arr));    }}

17_可变参数的概述和使用*

  • A:可变参数概述

    • 定义方法的时候不知道该定义多少个参数
  • B:格式

    • 修饰符 返回值类型 方法名(数据类型… 变量名){}
  • C:注意事项:

    • 这里的变量其实是一个数组
    • 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
public class ChangeableArgs_3_demo {    public static void main(String[] args) {        int[] arr = {11,22,33,44,55};//        print(arr);        print(11,22,33,44,55);        System.out.println("------------");        print(0, arr);    }        /*public static void print(int[] arr) {        for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    }*/        public static void print(int x,int ... arr) {            //可变参数是一个数组        for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    }}

18_Arrays工具类的asList()方法的使用*

  • A:案例演示

    • Arrays工具类的asList()方法的使用
    • Collection中toArray(T[] a)泛型版的集合转数组
import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Demo4_Aslist {    public static void main(String[] args) {//        demo1();//        demo2();        //集合转数组,加泛型的        ArrayList
list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); String[] arr = list.toArray(new String[10]);//当集合转换数组时,数组长度<=集合的size时,转换后的数组等于集合的size for (String string : arr) { //如果数组的长度大于了size,分配的数组长度就和你指定的长度一样 System.out.println(string); } } private static void demo2() { /*int[] arr = {11,22,33,44,55,66}; //将整个数组当做一个引用类型 List
list = Arrays.asList(arr); //基本数据类型的数组转换成集合,会将整个数组当作一个集合 System.out.println(list);*/ Integer[] arr = {11,22,33,44,55}; List
list = Arrays.asList(arr); //将数组转换成集合,数组必须是引用数据类型 System.out.println(list); } private static void demo1() { String[] arr = {"a","b","c","d","e","f","g"}; List
list = Arrays.asList(arr); //将数组转换成集合 list.add("h"); //不能添加 System.out.println(list); }}

19_集合嵌套之ArrayList嵌套ArrayList*

  • A:案例演示

    • 集合嵌套之ArrayList嵌套ArrayList
    • 案例

      • 学科——分若干个班级
      • 学科是一个大集合
      • 若干个班级分为每一个小集合
import java.util.ArrayList;import net.allidea.bean.Person;public class List_6_ArrayList {    public static void main(String[] args) {        ArrayList
> list = new ArrayList<>(); ArrayList
first = new ArrayList<>(); //创建第一个班级 first.add(new Person("杨幂",30)); first.add(new Person("胡歌",36)); first.add(new Person("郭富城",50)); first.add(new Person("周杰伦",38)); ArrayList
second = new ArrayList<>(); second.add(new Person("黄晓明",31)); second.add(new Person("赵薇",31)); second.add(new Person("陈坤",31)); //将班级添加到学科集合中 list.add(first); list.add(second); //遍历学科集合 for(ArrayList
a : list) { for(Person p : a) { System.out.println(p); } } }}

转载地址:http://rvisx.baihongyu.com/

你可能感兴趣的文章
品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制
查看>>
PHP const关键字
查看>>
ssh 安装笔记
查看>>
游戏音效下载网站大全
查看>>
angular $resouse服务
查看>>
实验五
查看>>
文法分析
查看>>
记那次失败了的面试
查看>>
程序包+创建包规范+创建包体+删除程序包
查看>>
3-继承
查看>>
java中如何实现类似goto的作法
查看>>
海归千千万 为何再无钱学森
查看>>
vue2.0 仿手机新闻站(六)详情页制作
查看>>
FreeRTOS的内存管理
查看>>
JSP----九大内置对象
查看>>
The Z-Index CSS Property: A Comprehensive Look | Smashing Coding
查看>>
Java中HashMap详解
查看>>
Office版本差别引发的语法问题
查看>>
Apache——访问控制
查看>>
web前端(10)—— 浮动,清除默认样式
查看>>