1. List的子类特点

  • ArrayList : 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高。
  • Vector : 底层数据结构是数组,查询快,增删慢。线程安全,效率低。
  • LinkedList : 底层数据结构是链表,查询慢,增删快。线程不安全,效率高。
  • 查询多 : ArrayList
  • 增删多:LinkedList
  • 什么都不知道,就用ArrayList

2. ArrayList存储自定义对象并遍历

import java.util.ArrayList;
import java.util.Iterator;public class ArrayListDemo2 {public static void main(String[] args) {ArrayList array = new ArrayList();Student s1 = new Student("哈狗帮", 68);Student s2 = new Student();s2.setAge(66);s2.setName("中意WAF");
//      Student s3 = new Student("waf", 36);
//      Student s4 = new Student("花和尚", 38);array.add(s1);array.add(s2);array.add(new Student("杨腾宇", 26));
//      array.add(s4);// 方法1Iterator it = array.iterator();while (it.hasNext()) {Student s = (Student) it.next();System.out.println(s.getName() + "---" + s.getAge());}System.out.println("----------------");// 方法2for (int x = 0; x < array.size(); x++) {// ClassCastException ע�⣬ǧ��Ҫ���������// String s = (String) array.get(x);// System.out.println(s);Student s = (Student) array.get(x);System.out.println(s.getName() + "---" + s.getAge());}}
}

3. 泛型概述和基本使用

  • 概述 : 是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。

  • 格式:<数据类型> 注意:该数据类型只能是引用类型。

  • 好处:

     A. 把运行时期的问题提前到了编译期间B. 避免了强制类型转换C. 优化了程序设计,解决了黄色警告线问题,让程序更安全
    
import java.util.ArrayList;
import java.util.Iterator;public class GenericDemo {public static void main(String[] args) {ArrayList<String> array = new ArrayList<String>();array.add("hello");array.add("world");array.add("java");
//      array.add(10);Iterator<String> it = array.iterator();while (it.hasNext()) {// ClassCastException// String s = (String) it.next();String s = it.next();System.out.println(s);}// String[] strArray = new String[3];// strArray[0] = "hello";// strArray[1] = "world";// strArray[2] = 10;}
}

4. ArrayList存储自定义对象并遍历(泛型版)

import java.util.ArrayList;
import java.util.Iterator;public class ArrayListDemo2 {public static void main(String[] args) {// ArrayList<Student> array = new ArrayList<>();ArrayList<Student> array = new ArrayList<Student>();Student s1 = new Student("夏侯渊", 40); Student s2 = new Student("赵云", 30); Student s3 = new Student("典韦", 26);array.add(s1);array.add(s2);array.add(s3);Iterator<Student> it = array.iterator();while (it.hasNext()) {Student s = it.next();System.out.println(s.getName() + "---" + s.getAge());}System.out.println("------------------");for (int x = 0; x < array.size(); x++) {Student s = array.get(x);System.out.println(s.getName() + "---" + s.getAge());}}
}

5. 泛型的前世今生

  • A. 泛型的由来 : Object类型作为任意类型的时候,在向下转型的时候,会隐含一个转型问题
  • B. 泛型类、泛型方法、泛型接口、泛型高级通配符
  • C. 泛型通常在集合中使用

6. 增强for循环

  • 是for循环的一种,其实是用来替代迭代器的

  • 格式:

     for(元素的数据类型 变量名 : 数组或者Collection集合的对象) {使用该变量即可,该变量其实就是数组或者集合中的元素。}
    
  • 好处:简化了数组和集合的遍历

  • 弊端 : 增强for循环的目标不能为null。建议在使用前,先判断是否为null

import java.util.ArrayList;
import java.util.List;public class ForDemo {public static void main(String[] args) {int[] arr = { 1, 2, 3, 4, 5 };for (int x = 0; x < arr.length; x++) {System.out.println(arr[x]);}System.out.println("---------------");for (int x : arr) {System.out.println(x);}System.out.println("---------------");String[] strArray = { "杨腾宇", "徐康健", "法印" };for (String s : strArray) {System.out.println(s);}System.out.println("---------------");ArrayList<String> array = new ArrayList<String>();array.add("hello");array.add("world");array.add("java");for (String s : array) {System.out.println(s);}System.out.println("---------------");List<String> list = null;// NullPointerExceptionif (list != null) {for (String s : list) {System.out.println(s);}}//ConcurrentModificationException
//       for (String s : array) {
//       if ("world".equals(s)) {
//       array.add("javaee");
//       }
//       }
//       System.out.println("array:" + array);}
}

7. ArrayList存储字符串并遍历增强for版

import java.util.ArrayList;
import java.util.Iterator;/** ArrayList存储字符串并遍历* A:迭代器* B:普通for* C:增强for*/
public class ArrayListDemo {public static void main(String[] args) {ArrayList<String> array = new ArrayList<String>();array.add("hello");array.add("world");array.add("java");// 迭代器Iterator<String> it = array.iterator();while (it.hasNext()) {String s = it.next();System.out.println(s);}System.out.println("------------------");// 普通forfor (int x = 0; x < array.size(); x++) {String s = array.get(x);System.out.println(s);}System.out.println("------------------");// 增强forfor (String string : array) {System.out.println(string);}}
}

8. List存储自定义对象并遍历增强for版

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class ArrayListDemo2 {public static void main(String[] args) {List<Student> list = new ArrayList<Student>();Student s1 = new Student("杨腾宇",66);Student s2 = new Student();s2.setAge(26);s2.setName("XKJSMSB");list.add(s1);list.add(s2);list.add(new Student("德子", 28));// 迭代器Iterator<Student> it = list.iterator();while (it.hasNext()) {Student s = it.next();System.out.println(s.getAge() + "---" + s.getName());}System.out.println("------");// 普通forfor (int i = 0; i < list.size(); i++) {Student s = list.get(i);System.out.println(s.getAge() + "---" + s.getName());}System.out.println("------");// 增强forfor (Student student : list) {System.out.println(student.getAge() + "---" + student.getName());}System.out.println("------");}}

9. 静态导入

  • 可以导入到方法级别的导入
  • 格式 : import static 包名…类名.方法名;
  • 注意事项 1 : 方法必须是静态的
  • 注意事项 2 : 如果多个类下有同名的方法,就不好区分了,还得加上前缀

10. 可变参数

  • 如果我们在写方法的时候,参数个数不明确,就应该定义可变参数

  • 例 : 写一个求和的方法,个个也不确定几个数据求和,但在调用的时候肯定就知道了,这个时候就用可变参数

  • 格式 : 修饰符 返回值类型 方法名(数据类型… 变量) { }

  • 注意 :

        A. 该变量其实是一个数组名B. 如果一个方法有多个参数,并且有可变参数,可变参数必须在最后
    
public class ArgsDemo {public static void main(String[] args) {int a = 10;int b = 20;int result = sum(a, b);System.out.println("result:" + result);int c = 30;result = sum(a, b, c);System.out.println("result:" + result);int d = 30;result = sum(a, b, c, d);System.out.println("result:" + result);result = sum(a, b, c, d, 40);System.out.println("result:" + result);result = sum(a, b, c, d, 40, 50);System.out.println("result:" + result);}public static int sum(int... a) {// System.out.println(a);//return 0;int s = 0;for(int x : a){s +=x;}return s;}// public static int sum(int a, int b, int c, int d) {// return a + b + c + d;// }//// public static int sum(int a, int b, int c) {// return a + b + c;// }//// public static int sum(int a, int b) {// return a + b;// }
}

11. Arrays工具类的一个asList()方法的使用

  • 注意事项 : 虽然可以把数组转成集合,但是集合的长度不能改变,可以改变集合中的元素
  • public static List asList(T… a):把数组转成集合
import java.util.Arrays;
import java.util.List;/** public static <T> List<T> asList(T... a):把数组转成集合* * 注意事项:*        虽然可以把数组转成集合,但是集合的长度不能改变,可以改变集合中的元素。*/
public class ArraysDemo {public static void main(String[] args) {// String[] strArray = { "hello", "world", "java" };// List<String> list = Arrays.asList(strArray);List<String> list = Arrays.asList("hello", "world", "java");// UnsupportedOperationException// list.add("javaee");// UnsupportedOperationException// list.remove(1);list.set(1, "javaee");for (String s : list) {System.out.println(s);}List<Integer> listWAF = Arrays.asList(6,7,8);for (Integer integer : listWAF) {System.out.println(integer.intValue());}listWAF.set(0, 66);listWAF.set(1, 77);listWAF.set(2, 88);for (Integer integer : listWAF) {System.out.println(integer.intValue());}
//      listWAF.add(9);
//      listWAF.remove(1);}
}

12. 集合嵌套存储和遍历元素的案例

  • 集合存储集合,用两个增强for遍历
import java.util.ArrayList;public class ArrayListDemo {public static void main(String[] args) {ArrayList<ArrayList<Student>> bigArrayList = new ArrayList<ArrayList<Student>>();ArrayList<Student> firstArrayList = new ArrayList<Student>();Student s1 = new Student("刘备", 30);Student s2 = new Student("赵云", 29);Student s3 = new Student("马超", 28);firstArrayList.add(s1);firstArrayList.add(s2);firstArrayList.add(s3);bigArrayList.add(firstArrayList);ArrayList<Student> secondArrayList = new ArrayList<Student>();Student s11 = new Student("曹操", 30);Student s22 = new Student("乐进ܲ", 28);Student s33 = new Student("张辽", 26);secondArrayList.add(s11);secondArrayList.add(s22);secondArrayList.add(s33);bigArrayList.add(secondArrayList);ArrayList<Student> thirdArrayList = new ArrayList<Student>();Student s111 = new Student("孙权", 40);Student s222 = new Student("甘宁", 35);Student s333 = new Student("太史慈", 30);thirdArrayList.add(s111);thirdArrayList.add(s222);thirdArrayList.add(s333);bigArrayList.add(thirdArrayList);for (ArrayList<Student> array : bigArrayList) {for (Student s : array) {System.out.println(s.getName() + "---" + s.getAge());}}}
}

13. 产生10个1-20之间的随机数要求随机数不能重复案例

import java.util.ArrayList;
import java.util.Random;public class RandomDemo {public static void main(String[] args) {Random r = new Random();ArrayList<Integer> array = new ArrayList<Integer>();int count = 0;while (count < 10) {int number = r.nextInt(20) + 1;if(!array.contains(number)){array.add(number);count++;}}for(Integer i : array){System.out.println(i);}}
}

14. 键盘录入多个数据在控制台输出最大值案例

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;public class ArrayListDemo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);ArrayList<Integer> array = new ArrayList<Integer>();while (true) {System.out.println("请输入数据,以0结尾:");int number = sc.nextInt();if (number != 0) {array.add(number);} else {break;}}// public <T> T[] toArray(T[] a)Integer[] i = new Integer[array.size()];// Integer[] ii = array.toArray(i);array.toArray(i);// System.out.println(i);// System.out.println(ii);// public static void sort(Object[] a)Arrays.sort(i);System.out.println("数组为:" + arrayToString(i) + "最大值为:"+ i[i.length - 1]);}public static String arrayToString(Integer[] i) {StringBuilder sb = new StringBuilder();sb.append("[");for (int x = 0; x < i.length; x++) {if (x == i.length - 1) {sb.append(i[x]);} else {sb.append(i[x]).append(", ");}}sb.append("]");return sb.toString();}
}

Java基础 - 集合框架(3) : List的子类、泛型、可变参数相关推荐

  1. java基础—集合框架

    java基础-集合框架 JDK1.2开始引入了集合框架的概念,以弥补java中只有数组这种容器的单一问题,这些框架多数由接口构成,另外也包含了一些对于接口实现的类,其中这些接口的最上层接口为java. ...

  2. Java基础-------集合框架

    一,集合简介 1.1 集合由来: 对象的存储:①数组(基本数据类型  & 引用数据类型)  ②集合(引用数据类型)     >数组存储数据的弊端:长度一旦初始化以后,就不可变:真正给数组 ...

  3. Java基础—集合框架(三)

    一Map集合 二Map扩展知识 集合框架(三) 一.Map集合 1.概述 Map集合用于存储键值对,且它保证键的唯一性,并且每个键最多只能映射一个值.Map集合是Set集合的底层实现,其和Collec ...

  4. Java 基础 —— 集合框架概述

    一.集合框架图 Java 集合框架主要包括两种类型的容器:一种是集合(Collection),存储一个元素集合:另一种是图(Map),存储键/值对映射.Collection 接口又有 3 种子类型:L ...

  5. Java基础 - 集合框架(5) : Map集合、Collections

    1. Map集合的概述和特点 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 2. Map和Collection的区别 ? A. Map 存储的是键值对形式的元素,键唯一,值 ...

  6. 【JAVA SE】第十四章 集合框架、语法糖和泛型

    第十四章 集合框架.语法糖和泛型 文章目录 第十四章 集合框架.语法糖和泛型 一.集合框架 1.概念 2.接口 二.语法糖 1.概念 2.解语法糖 三.泛型 1.概念 2.泛型类 3.泛型接口 4.泛 ...

  7. java三大集合框架(面试知识储备精华篇)

    java三大集合框架 :  set  list   map 如上图 set list 都属于collection的子接口(collection为顶层接口) Map 不属于collection接口 Se ...

  8. J2EE基础集合框架之Set

    今天将进行介绍的是J2EE基础集合框架之Set,其主要分为四个点 目录 1,set集合特点&遍历集合 2,set集合去重原理 3,set集自然排序接口 4,set集合比较器排序 1,set集合 ...

  9. JAVA基础---集合(一)--集合框架概述

    为什么用集合如何合理用集合,以及如何实现的和他们的实现原理,如果搞清了对于之后学习其他知识和开发是很有大帮助性的. 什么是集合框架? 集合框架是表示和操作集合的统一体系结构.所有集合框架都包含以下内容 ...

最新文章

  1. 解决MathType与Word 2016兼容性问题。
  2. 超级账本(Hyperledger Fabric):基本架构及运作机制
  3. Polemo Chat客户端行为
  4. 使用Visual Studio Code 开发.NET Core应用程序
  5. 如何评价周志华深度森林模型
  6. c语言if语句教学设计,C实验教案(清华)
  7. java常用英语词汇翻译_JAVA 一些常用的英文及翻译
  8. Java高并发编程实战1,那些年学过的锁
  9. 图解通信原理与案例分析-18:低功耗、远距离物联网无线通信技术LoRa概述与扩频通信的基本原理
  10. pi启动configtool
  11. 不用管别人怎么评论自己_不要管别人怎样评价你,做好自己就行了
  12. 边框给背景图css怎么写,使用css设置边框背景图片
  13. 光衰高怎么办_发光顶角线使用起来方便吗?维护成本高吗?
  14. 交叉编译openssl
  15. Weakly-supervised Online Hashing
  16. renren-generator:运行报错java: 找不到符号 符号: 类 Longblob
  17. 转:关于食品090930
  18. 微信小程序Canvas学习
  19. 模拟Android内存不足 activity回收 值保存 状态恢复
  20. 如何用读书构建你的思维世界

热门文章

  1. 2021年中国化妆刷市场趋势报告、技术动态创新及2027年市场预测
  2. MECT: Multi-Metadata Embedding based Cross-Transformer forChinese Named Entity Recognition论文解析
  3. 敏捷领导力 - 修自己(练内功)
  4. flexible wincc 弹窗_wincc flexible弹出小窗口怎么做?
  5. ROS功能包在线把速腾聚创点云格式转为velodyne点云格式
  6. 异步同步通信数据帧格式
  7. 【element+vue】点击加号增加一行,点击减号删除一行
  8. C语言学习Day23 递归函数、局部变量、全局变量
  9. 加拿大大学计算机专业要化学成绩吗,能否详细谈谈加拿大大学化学专业的排名?...
  10. 《游戏视频主播手册》——2.4 选择游戏视频直播平台