集合、泛型

第一章:集合1

1. 什么是集合

  • 定义:在Java中,集合是一种可以存储多个数据的容器。

  • 代码:

    1. ArrayList<String> list = new ArrayList<>();
    2. list.add("张三");
    3. list.add("王五");
    4. list.add("赵六");
    5. System.out.println(list); // [张三, 王五, 赵六]

2. 集合和数组的区别

  • 区别:数组的长度是固定的,集合的长度是可变的

  • 代码:

    1. String[]strs = new String[2];
    2. strs[0] = "张三";
    3. strs[1] = "李四";
    4. // strs[2] = "赵六"; // 运行时报错java.lang.ArrayIndexOutOfBoundsException
    5. ArrayList<String> list = new ArrayList<>();
    6. System.out.println(list.size());
    7. list.add("张三");
    8. list.add("王五");
    9. list.add("赵六");
    10. System.out.println(list.size());

3. 集合框架Collection

  • 集合按照其存储结构可以分为两大类,本篇先学习Collection

  • Collection集合介绍

    • 单列集合类的根接口

    • 有两个子接口

      • java.util.List;特点是:内容可重复,有序

      • java.util.Set; 特点是:内容不可重复,无序

    • 定义了单例集合最共性的方法。

  • 图解Collection框架结构

  • Collection中通用方法

    • 方法:

      • public boolean add(E e): 把给定的对象添加到当前集合中 。

      • public void clear() :清空集合中所有的元素。

      • public boolean remove(E e): 把给定的对象在当前集合中删除。

      • public boolean contains(E e): 判断当前集合中是否包含给定的对象。

      • public boolean isEmpty(): 判断当前集合是否为空。

      • public int size(): 返回集合中元素的个数。

      • public Object[] toArray(): 把集合中的元素,存储到数组中。

    • 代码:

      1. List<String> list = new ArrayList<>();
      2. // 添加元素
      3. list.add("张三");
      4. list.add("李四");
      5. System.out.println(list);
      6. // 移除元素
      7. list.remove("张三");
      8. System.out.println(list);
      9. // 判断集合中是否包含某个元素
      10. boolean isHas = list.contains("张三");
      11. System.out.println(isHas); // false
      12. // 判断当前集合是否为空
      13. boolean isEmpty = list.isEmpty();
      14. System.out.println(isEmpty);
      15. // 清空元素
      16. list.clear();
      17. System.out.println(list);
      18. // 集合的长度
      19. System.out.println(list.size());
      20. // 集合中的元素存储到一个数组中
      21. Object[]s = list.toArray();

4. 遍历集合

  • Iterator方式

    • 介绍

      ​ Iterator,是一个迭代器接口。Collection中的成员方法iterator()被调用后,会返回一个Iterator对象。利用这个对象可以实现遍历集合。

      ​ 如何遍历呢?在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

    • Iterator对象的成员方法:

      • hasNext(); 检测集合中是否存在下一个元素

      • next(); 找到并获取下一个元素

    • 迭代器的原理

      ​ 在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

    • 代码:

      1. List<String> list = new ArrayList<>();
      2. list.add("张三");
      3. list.add("李四");
      4. list.add("王五");
      5. // 得到一个迭代器对象
      6. Iterator<String> it = list.iterator();
      7. while (it.hasNext()) {
      8. String str = it.next();
      9. System.out.println(str);
      10. }
  • 增强for

    • 介绍

      ​ 增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

    • 使用格式

      1. for(元素的数据类型  变量 : Collection集合or数组){ //写操作代码 }
    • 代码:

      1. for (String name:list) {  System.out.println(name); }

第二章:泛型

1. 什么是泛型

​ 泛型,未知的类型,可以在类或方法中预支地使用未知的类型。

2. 泛型的好处

​ 可以避免类型转换的麻烦。

3. 定义和使用含有泛型的类

  • 格式修饰符 class 类名<代表泛型的变量> { }

  • 使用泛型:在创建对象的使用。也就是在创建对象时确定泛型的类型。

  • 代码:

    1. public class ArrayList<E> {
    2. public boolean add(E e){ }
    3. ...
    4. }
    5. public class MainDemo{
    6. public static void main(String[] args) {
    7. ArrayList<String> list = new ArrayList<>();
    8. list.add("张三");
    9. }
    10. }

4. 定义和使用含有泛型的方法

  • 格式:修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }

  • 代码:

    1. public static void main(String[] args) {
    2. methon1("张三");
    3. }
    4. public static <M> void methon1(M m){
    5. System.out.println(m);
    6. }

5. 定义和使用含有泛型的接口

  • 格式:修饰符 interface接口名<代表泛型的变量>

  • 代码:

    1. public interface TestInterface<T> {
    2. public abstract void show(T t);
    3. }
    4. public class<T> TestImpl implements TestInterface<T> {
    5. @Override
    6. public T void show(T o) {
    7. System.out.println(o);
    8. }
    9. }
    10. public class Main01 {
    11. public static void main(String[] args) {
    12. TestImpl<String> t = new TestImpl<>();
    13. t.show("我的信息");
    14. }
    15.  
    16. }

6. 泛型通配符

  • 介绍

    不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。

    此时只能接受数据,不能往该集合中存储数据。

  • 代码:

    1. public static void main(String[] args) {
    2. ArrayList<String> list1 = new ArrayList<>();
    3. list1.add("张三");
    4. list1.add("李四");
    5. ArrayList<Integer> list2 = new ArrayList<>();
    6. list2.add(1);
    7. list2.add(2);
    8. print(list1);
    9. print(list2);
    10. }
    11. // 定义一个方法打印集合,不确定未来集合中的元素类型,<>中不能写入Object中,因为泛型中不存在继承关系。
    12. public static void print(ArrayList<?> list){
    13. System.out.println(list);
    14. }

7. 泛型通配符受限使用

  • 受限1类型名称 <? extends 类 > 对象名称

    • 只能接收该类型或该类型的子类

  • 受限2类型名称 <? super 类 > 对象名称

    • 只能接收该类型或该类型的父类

  • 代码

    1. public static void main(String[] args) {
    2. Collection<Integer> list1 = new ArrayList<Integer>();
    3. Collection<String> list2 = new ArrayList<String>();
    4. Collection<Number> list3 = new ArrayList<Number>();
    5. Collection<Object> list4 = new ArrayList<Object>();
    6.  
    7. getElement(list1);
    8. getElement(list2);//报错
    9. getElement(list3);
    10. getElement(list4);//报错
    11.  
    12. getElement2(list1);//报错
    13. getElement2(list2);//报错
    14. getElement2(list3);
    15. getElement2(list4);
    16.  
    17. }
    18. // 泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
    19. public static void getElement1(Collection<? extends Number> coll){}
    20. // 泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
    21. public static void getElement2(Collection<? super Number> coll){}

第三章:综合案例斗地主

  • 需求:

    • 实现发牌功能,并且展示底牌。

  • 代码:

    1. package it.leilei.cn.demo05;
    2. import java.util.ArrayList;
    3. import java.util.Collection;
    4. import java.util.Collections;
    5. public class Main01 {
    6. public static void main(String[] args) {
    7. // 1. 准备牌
    8. // 牌的花色
    9. String[]colors = {"♥","♠","♣","♦"};
    10. // 牌的数字
    11. String[]nums = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
    12. // 2. 组装装牌
    13. ArrayList<String> poker = new ArrayList<>();
    14. for (String num:nums) {
    15. for (String color:colors) {
    16. poker.add(num + color);
    17. }
    18. }
    19. poker.add("大王");
    20. poker.add("小王");
    21. // 3. 发牌
    22. ArrayList<String> list1 = new ArrayList<>();
    23. ArrayList<String> list2 = new ArrayList<>();
    24. ArrayList<String> list3 = new ArrayList<>();
    25. ArrayList<String> diPai = new ArrayList<>();
    26. // 打乱牌
    27. Collections.shuffle(poker);
    28. for (int i = 0,len = poker.size(); i < len;i++) {
    29. if(i>=51) {
    30. diPai.add(poker.get(i));
    31. }else if(i%3==0) {
    32. list1.add(poker.get(i));
    33. }else if(i%3==1) {
    34. list2.add(poker.get(i));
    35. }else if(i%3==2) {
    36. list3.add(poker.get(i));
    37. }
    38. }
    39. System.out.println("周星驰:" + list1);
    40. System.out.println("刘德华:" + list2);
    41. System.out.println("周润发:" + list3);
    42. System.out.println("底牌:" + diPai);
    43. }
    44. }

Java基础01-集合1、泛型的更多相关文章

  1. Java基础之集合与泛型

    话不多说,直接上图 1.Collection集合小结 注意: 凡是使用哈希表保存对象的容器,保存的对象在容器中都是唯一的,唯一性是通过被保存对象的hashCode和equals方法共同确定: 凡是使用 ...

  2. java基础-Map集合

    java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...

  3. Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

    Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...

  4. java基础 01

    java基础01 1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Ru ...

  5. Java基础之多态和泛型浅析

    Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...

  6. 第6节:Java基础 - 三大集合(上)

    第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ...

  7. 备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!

    前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ...

  8. java基础技术集合面试【笔记】

    java基础技术集合面试[笔记] Hashmap: 基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键(除了不同步和允许使用 null 之外,Ha ...

  9. java基础(18):集合、Iterator迭代器、增强for循环、泛型

    1. 集合 1.1 集合介绍 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数 ...

  10. Java基础--说集合框架

    版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ...

随机推荐

  1. 防御 DDoS 的终极奥义——又拍云 SCDN

    现如今不论是年轻的 80.90 后,还是 70.60 后,都在享受互联网带来的舒适和便利.在家就可以"逛商场",完全不受时间的限制:在线支付既方便又安全:业余娱乐项目多种多样,打农 ...

  2. [Machine Learning] Linear regression

    1. Variable definitions m : training examples' count \(y\) : \(X\) : design matrix. each row of \(X\ ...

  3. Solidity 编程实例--简单的公开拍卖

    通常简单的公开拍卖合约,是每个人可以在拍卖期间发送他们的竞拍出价.为了实现绑定竞拍人的到他们的拍卖,竞拍包括发送金额/ether.如果产生了新的最高竞拍价,前一个最高价竞拍人将会拿回他的钱.在竞拍阶段 ...

  4. Spring Cloud Feign 总结问题,注意点,性能调优,切换okhttp3

    ### Feign常见问题总结 **FeignClient接口如使用`@PathVariable` ,必须指定value属性** ```java //在一些早期版本中, @PathVariable(& ...

  5. java中List、Set和Map三个接口及其主要实现类

    三个接口都在java.util包下 List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个共同的父接口,叫Collection,Map没有继承Collection接口 1.List接口: ...

  6. SpringCloud系列-利用Feign实现声明式服务调用

    上一篇文章<手把手带你利用Ribbon实现客户端的负载均衡>介绍了消费者通过Ribbon调用服务实现负载均衡的过程,里面所需要的参数需要在请求的URL中进行拼接,但是参数太多会导致拼接字符 ...

  7. [Windows内核分析]KPCR结构体介绍 (CPU控制区 Processor Control Region)

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 逆向分析操作系统内核代码至少需要具备两项技能: 段页汇编代码非常懂 ...

  8. Bugku练习

    首先我们拿到了一个admin.exe的文件,根据惯例我先用查一下有没有加壳: ???这是怎么回事??? 我于是用了winhex打开看了一下,发现 这不就是data协议吗~~~,把后面的base64解密 ...

  9. 网络驱动之net_device结构体

    在Linux系统中,网络设备都被抽象为struct net_device结构体.它是网络设备硬件与上层协议之间联系的接口,了解它对编写网络驱动程序非常有益,所以本文将着手简要介绍linux-2.6.3 ...

  10. python编程基础之二十四

    函数: def 函数名([参数1],[参数2],[参数3], ... ,[参数n]): 函数体代码 函数名命名规则:同标识符命名相同,但是多了一点,不要和系统函数重名,其实所有命名都是一样只要符合标识 ...