Java基础01-集合1、泛型
集合、泛型
第一章:集合1
1. 什么是集合
定义:在Java中,集合是一种可以存储多个数据的容器。
代码:
ArrayList<String> list = new ArrayList<>(); list.add("张三"); list.add("王五"); list.add("赵六"); System.out.println(list); // [张三, 王五, 赵六]
2. 集合和数组的区别
区别:数组的长度是固定的,集合的长度是可变的。
代码:
String[]strs = new String[2]; strs[0] = "张三"; strs[1] = "李四"; // strs[2] = "赵六"; // 运行时报错java.lang.ArrayIndexOutOfBoundsException ArrayList<String> list = new ArrayList<>(); System.out.println(list.size()); list.add("张三"); list.add("王五"); list.add("赵六"); 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(): 把集合中的元素,存储到数组中。
代码:
List<String> list = new ArrayList<>(); // 添加元素 list.add("张三"); list.add("李四"); System.out.println(list); // 移除元素 list.remove("张三"); System.out.println(list); // 判断集合中是否包含某个元素 boolean isHas = list.contains("张三"); System.out.println(isHas); // false // 判断当前集合是否为空 boolean isEmpty = list.isEmpty(); System.out.println(isEmpty); // 清空元素 list.clear(); System.out.println(list); // 集合的长度 System.out.println(list.size()); // 集合中的元素存储到一个数组中 Object[]s = list.toArray();
4. 遍历集合
Iterator方式
介绍
Iterator,是一个迭代器接口。Collection中的成员方法iterator()被调用后,会返回一个Iterator对象。利用这个对象可以实现遍历集合。
如何遍历呢?在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
Iterator对象的成员方法:
hasNext(); 检测集合中是否存在下一个元素
next(); 找到并获取下一个元素
迭代器的原理
在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。
代码:
List<String> list = new ArrayList<>(); list.add("张三"); list.add("李四"); list.add("王五"); // 得到一个迭代器对象 Iterator<String> it = list.iterator(); while (it.hasNext()) { String str = it.next(); System.out.println(str); }
增强for
介绍
增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
使用格式
for(元素的数据类型 变量 : Collection集合or数组){ //写操作代码 }代码:
for (String name:list) { System.out.println(name); }
第二章:泛型
1. 什么是泛型
泛型,未知的类型,可以在类或方法中预支地使用未知的类型。
2. 泛型的好处
可以避免类型转换的麻烦。
3. 定义和使用含有泛型的类
格式:
修饰符 class 类名<代表泛型的变量> { }使用泛型:在创建对象的使用。也就是在创建对象时确定泛型的类型。
代码:
public class ArrayList<E> { public boolean add(E e){ } ... } public class MainDemo{ public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("张三"); } }
4. 定义和使用含有泛型的方法
格式:
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }代码:
public static void main(String[] args) { methon1("张三"); } public static <M> void methon1(M m){ System.out.println(m); }
5. 定义和使用含有泛型的接口
格式:
修饰符 interface接口名<代表泛型的变量>代码:
public interface TestInterface<T> { public abstract void show(T t); } public class<T> TestImpl implements TestInterface<T> { @Override public T void show(T o) { System.out.println(o); } } public class Main01 { public static void main(String[] args) { TestImpl<String> t = new TestImpl<>(); t.show("我的信息"); } }
6. 泛型通配符
介绍
不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。
此时只能接受数据,不能往该集合中存储数据。
代码:
public static void main(String[] args) { ArrayList<String> list1 = new ArrayList<>(); list1.add("张三"); list1.add("李四"); ArrayList<Integer> list2 = new ArrayList<>(); list2.add(1); list2.add(2); print(list1); print(list2); } // 定义一个方法打印集合,不确定未来集合中的元素类型,<>中不能写入Object中,因为泛型中不存在继承关系。 public static void print(ArrayList<?> list){ System.out.println(list); }
7. 泛型通配符受限使用
受限1:
类型名称 <? extends 类 > 对象名称只能接收该类型或该类型的子类
受限2:
类型名称 <? super 类 > 对象名称只能接收该类型或该类型的父类
代码:
public static void main(String[] args) { Collection<Integer> list1 = new ArrayList<Integer>(); Collection<String> list2 = new ArrayList<String>(); Collection<Number> list3 = new ArrayList<Number>(); Collection<Object> list4 = new ArrayList<Object>(); getElement(list1); getElement(list2);//报错 getElement(list3); getElement(list4);//报错 getElement2(list1);//报错 getElement2(list2);//报错 getElement2(list3); getElement2(list4); } // 泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类 public static void getElement1(Collection<? extends Number> coll){} // 泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类 public static void getElement2(Collection<? super Number> coll){}
第三章:综合案例斗地主
需求:
实现发牌功能,并且展示底牌。
代码:
package it.leilei.cn.demo05; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; public class Main01 { public static void main(String[] args) { // 1. 准备牌 // 牌的花色 String[]colors = {"♥","♠","♣","♦"}; // 牌的数字 String[]nums = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; // 2. 组装装牌 ArrayList<String> poker = new ArrayList<>(); for (String num:nums) { for (String color:colors) { poker.add(num + color); } } poker.add("大王"); poker.add("小王"); // 3. 发牌 ArrayList<String> list1 = new ArrayList<>(); ArrayList<String> list2 = new ArrayList<>(); ArrayList<String> list3 = new ArrayList<>(); ArrayList<String> diPai = new ArrayList<>(); // 打乱牌 Collections.shuffle(poker); for (int i = 0,len = poker.size(); i < len;i++) { if(i>=51) { diPai.add(poker.get(i)); }else if(i%3==0) { list1.add(poker.get(i)); }else if(i%3==1) { list2.add(poker.get(i)); }else if(i%3==2) { list3.add(poker.get(i)); } } System.out.println("周星驰:" + list1); System.out.println("刘德华:" + list2); System.out.println("周润发:" + list3); System.out.println("底牌:" + diPai); } }
Java基础01-集合1、泛型的更多相关文章
- Java基础之集合与泛型
话不多说,直接上图 1.Collection集合小结 注意: 凡是使用哈希表保存对象的容器,保存的对象在容器中都是唯一的,唯一性是通过被保存对象的hashCode和equals方法共同确定: 凡是使用 ...
- java基础-Map集合
java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...
- Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)
Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...
- java基础 01
java基础01 1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Ru ...
- Java基础之多态和泛型浅析
Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...
- 第6节:Java基础 - 三大集合(上)
第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ...
- 备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!
前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ...
- java基础技术集合面试【笔记】
java基础技术集合面试[笔记] Hashmap: 基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键(除了不同步和允许使用 null 之外,Ha ...
- java基础(18):集合、Iterator迭代器、增强for循环、泛型
1. 集合 1.1 集合介绍 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数 ...
- Java基础--说集合框架
版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ...
随机推荐
- javascript中字符串对象常用的方法和属性
前言 字符串是一种非常重要的数据类型,在Java等面向对象编程语言中,它代表对象类型,而在javascript中它却是一种基本数据类型,在开发的领域中,我们经常会碰到,无论是前端还是后台.比如后台验证 ...
- linux系统下使用xampp 丢失mysql root密码 只能远程访问,本地无法连接数据库
如果在ubuntu 下面 使用xampp这个集成开发环境,却忘记mysql密码. 当出现只能远程访问的,本地无法访问,通常是host改成% 远程访问,本地访问到一个是空壳.这是权限的问题 需要修hos ...
- onethinkphp 添加钩子报错
今天改了下程序再保存,出现错误:Namespace declaration statement has to be the very first statement in the script 度娘一 ...
- Redis的持久化机制是什么?各自的优缺点?
Redis 提供两种持久化机制 RDB 和 AOF 机制: 1.RDBRedis DataBase)持久化方式:是指用数据集快照的方式半持久化模式) 记录 redis 数据库的所有键值对,在某个时间点 ...
- Zookeeper学习笔记之 Zab协议(Zookeeper Atomic Broadcast)
Zab协议(Zookeeper Atomic Broadcast): 广播模式: Leader将所有更新(称为proposal),顺序发送给Follower 当Leader收到半数以上的Followe ...
- FutureTask是怎样获取到异步执行结果的?
所谓异步任务,就是不在当前线程中进行执行,而是另外起一个线程让其执行.那么当前线程如果想拿到其执行结果,该怎么办呢? 如果我们使用一个公共变量作为结果容器,两个线程共用这个值,那么应该是可以拿到结果的 ...
- StringBuffer的一些小整理
大家好,欢迎大家在百忙当中来到我的博客文,也许是因为各种需要到此一游,哈哈.不过来到这里不会让您失望的,此段博文是这段时间不忙的时候整理出来的,对于刚学java基础的同学非常适合.下面言归正传: 首先 ...
- python selenium自动化常用关键字
工具安装: 1.安装python 2.安装selenium库(dos命令下进入selenium-2.53.2存放路径,执行pip install selenium-2.53.2) 3.将浏览器驱动放到 ...
- 致远OA_0day批量植Cknife马一步到位
最近各位师傅都在刷这个嘛,原本的exp是上传一个test123456.jsp的命令执行的马子,不过我在试的时候发现替换成C刀一句话出错,原因未知,并且test123456.jsp如果存在的话用原来ex ...
- powershell下ssh客户端套件实现
有时会需要和Linux机器进行交互.所以这时就需要在Powershell中使用SSH. 0x01 查找Powershell中的SSH功能模块 如图,显示没有find-module的命令,需要安装Pac ...