06-集合
来源:互联网 发布:ubuntu添加中文输入法 编辑:程序博客网 时间:2024/06/05 06:36
1.集合:
概述:用来存储长度不固定数据的容器
1 int num = 1;
1 2 3 4 int[] arr = {1,2,3,4}; // 长度是固定 数组里面的元素的数据类型 是一致
"jack" 18 1.76 ----> 类(姓名,年龄,身高) ---> 对象
学号 : 姓名 -----> HashMap 集合 ---->键值对的形式 ????
HashMap : 无序 存储个数不固定 HashMap大小不固定,可以动态添加数据 键是不能重复的 值可以重复
1.声明:
HashMap<String,String> map;
2.定义
HashMap<Integer, String> map1 = new HashMap<Integer,String>(); // 推荐
HashMap<Integer,String> map2 = new HashMap<>(); // 推荐 jdk8开始支持第一种写法
HashMap<Integer, String> map3 = new HashMap();
3.常用方法
put() 往集合中添加键值对
size() 存放了多少个键值对.
get() 返回指定键所映射的值 根据键 取对应的值
isEmpty() 判断集合是否有键值对 没有的话就是 true 否则就是 false
containsKey() 判断是否包含 指定的键
containsValue() 判断是否包含 指定的值
clear() 清空集合中所有的键值对
ArrayList : 有序的集合 并且有下标 和数组一样下标从0开始,有顺序的
1.声明:
ArrayList names;
2.定义:
ArrayList names = new ArrayList();
ArrayList<String> list1 = new ArrayList();
ArrayList<String> list = new ArrayList<>(); // 推荐
ArrayList<String> list2 = new ArrayList<String>();// 推荐
ArrayList list3 = new ArrayList<>();
ArrayList list4 = new ArrayList();
常用的方法:
add() 添加元素
get() 根据索引获取对应的值 索引是从 0 开始的
remove(); 根据索引删除指定的值 删除之后,后面的元素会上位
isEmpty() 判断是否为空
indexOf() 根据指定的对象返回该对象在集合中首次出现的索引,如果没有就返回 -1;
lastIndexOf() 根据指定的对象返回 该对象在集合中最后一个位置上的索引 如果没有就返回 -1
set(int index, E element) 用指定的元素替代此列表中指定位置上的元素。
size() 获取集合的长度
toArray() 把集合转化成数组
Arrays.toString 把数组转化成字符串
2.包装类
基本数据类型 ----- 引用数据类型
// 自动装箱 自动的把基本数据类型 包装成 引用数据类型 int Integer
Integer i3 = 28;
String str3 = i3.toString();
System.out.println("str3 = " + str3);
引用数据类型 ---- 基本数据类型
// 自动拆箱 自动把引用数据类型 转化成 基本数据类型
Integer i3 = 28;
int num = i3;
System.out.println(num + 1);// 29
Integer(引用数据类型) int
// 基本数据类型 引用数据类型
// byte Byte
// short Short
// int Integer
// long Long
// char Character
// float Float
// double Double
// boolean Boolean
3.泛型 <>
泛型 : 限制对象类型的种类
集合的泛型规定只能存放引用数据类型(对象类型),如果需要存放基本数据只能使用包装类
// 泛型:
// 官方理解: 特指某种指定的数据类型
// 大白话: 就是用来限定 集合中应该存储什么类型的数据 限制键的类型 和 值的类型
// 特点: 泛型只能是引用数据类型
知识点补充
集合的体系图:
单列集合:
Collection 接口:
List 接口:
ArrayList 类
LinkedList 类
Vector 类
Set 接口:
HashSet
TreeSet
双列集合:
Map 接口:
HashMap 类
TreeMap 类
求长度: 数组 : length 数组的属性
String: length() 方法
集合: size() 方法
集合转化为数组 toArray(); 数组转化为字符串 toString()
ArrayList<String> list; // null
list = new ArrayList<>();
list.add("张三丰");
list.add("张无忌");
list.add("欧阳锋");
list.add("洪七公");
list.add("张三丰");
System.out.println(list);
Object[] objArr = list.toArray(); // 集合转化成数组
System.out.println(objArr);
String str = Arrays.toString(objArr); // 数组转化成字符串
System.out.println(str);
数组转化为集合 Arrays.asList();
如果数组是引用数据类型,那么就会把数组中的每个元素 存储到集合中去 转化成集合后,那么这个集合 不可以进行添加删除操作 可以进行修改操作
如果是基本数据类型的数组 ,那么就会把整个数组当成一个对象 存储到集合中去
// 数组转化为集合
Integer[] arr = {1,2,3,4,5};
java.util.List<Integer> asList = Arrays.asList(arr);
// 不可以进行添加删除操作 可以进行修改操作
System.out.println(asList); // [1, 2, 3, 4, 5]
// asList.add(22);
// asList.remove(2);
asList.set(2, 30);
System.out.println(asList);
// 如果数组是引用数据类型,那么就会把数组中的每个元素 存储到集合中去 转化成集合后,那么这个集合 不可以进行添加删除操作 可以进行修改操作
// 如果是基本数据类型的数组 ,那么就会把整个数组当成一个对象 存储到集合中去
int[] arr2 = {1,2,3,4};
java.util.List<int[]> asList2 = Arrays.asList(arr2);
System.out.println(asList2);
System.out.println(asList2.size());
课堂练习:
public static void main(String[] args) {
// TODO 自动生成的方法存根
// Integer int
// 把 int 类型 的数据 ------> Integer 类型的对象
Integer i = new Integer(18);// 18 ----> 对象 i 验证一下 i 是否 是18 把int类型 的18 转化为包装类 Integer类型的对象
String str = i.toString();// 把Integer 类型的对象 转换成字符串对象
System.out.println(str);// 18
System.out.println(i + 1); // 自动拆箱
Integer i2 = Integer.valueOf(19);// 把int 类型的19 包装成了 一个Integer 类型的对象
System.out.println("i2 = " + i2);
// 如果转化成功,就可以调用 Integer 类里面的方法
String str2 = i2.toString();
System.out.println("str2 = " + str2);
// 自动装箱 自动的把基本数据类型 包装成 引用数据类型 int Integer
Integer i3 = 28;
String str3 = i3.toString();
System.out.println("str3 = " + str3);
// Integer 类型 int 类型
// 自动拆箱 自动把引用数据类型 转化成 基本数据类型
int num = i3;
System.out.println(num + 1);// 29
int value = i3.intValue();
System.out.println(value + 2); // 30
//
int res = Integer.parseInt("123"); // 123 int String str; 参数 : 数字字符串
System.out.println(res + 1);
// 基本数据类型 引用数据类型
// byte Byte
// short Short
// int Integer
// long
Long
// char Character
// float Float
// double Double
// boolean Boolean
}
补充知识:
分类: 此处先写三个循环 循环: 循环的次数(确不确定) 循环条件 循环体(也就是我们的大括号里面的代码)
如果次数不确定,一定要知道循环结束的条件
如果次数确定,那么直接写条件
普通for循环:
格式:
① ② ③
for(int i=0; i<次数; i++) { //这个循环的作用是: 打印0-9之间的数字
④
System.out.println(i); //这是循环体
}
执行顺序:
第一次: ①, ②, ④, ③
第二次: ②, ④, ③
第三次: ②, ④, ③
......
最后一次: ② //条件满足就执行循环体,不满足就结束循环
while循环:
格式:
int i = 0; ①
while(i <次数) { ②
System.out.println(i); ④
i++;③
}
执行顺序:
第一次: ①, ②, ④, ③
第二次: ②, ④, ③
第三次: ②, ④, ③
......
最后一次: ② //条件满足就执行循环体,不满足就结束循环
增强for循环:
ArrayList<String> list = new ArrayList<String>();
//往集合中添加元素, 此处代码略
//遍历集合
//数据类型 变量名 要遍历的集合(或者数组)
for(String str : list) {
//打印集合中的元素
System.out.println(str);
}
// for(数据类型 变量名 : 数组名\集合){ // 数据类型: 数组里面的每个元素的数据类型
// // 循环体
// }
// for(String name : arr){
// System.out.println(name);
// }
键盘输入:
步骤:
A: 导包.
import java.util.Scanner;
B: 创建对象.
Scanner sc = new Scanner(System.in);
C: 接收用户录入的内容即可.
String line = sc.nextLine();
int num = sc.nextInt();
HashMap 集合遍历
// 集合的遍历 HashMap 遍历 无序 没有下标
HashMap<String, String> map = new HashMap<>();
map.put("k1", "v1");
map.put("k2", "v2");
map.put("k3", "v3");
map.put("k4", "v4");
map.put("k5", "v5");
// 遍历 拿到键
Set<String> set = map.keySet(); // AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet
// set 可能有
for(String str : set){
// System.out.println(str); // set 集合中存储的就是 map集合中的所有的键
String value = map.get(str);
System.out.println(str + "...." +value);
}
// Entry<String, String> HashMap<String,String>
Set<Entry<String, String>> entrySet = map.entrySet();// 拿出来的是键值对
for(Entry<String, String> entry : entrySet){
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key +"..." + value);
}
数组和 集合 ArrayList 的遍历
int[] arr = {1,2,3,4};
for(int num : arr){
System.out.println(num);
}
System.out.println("=====================");
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
System.out.println("=====================");
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("jack");
arrayList.add("rose");
arrayList.add("jim");
arrayList.add("lily");
for(String str : arrayList){
System.out.println(str);
}
System.out.println("=====================");
for(int i = 0;i<arrayList.size();i++){
String str = arrayList.get(i);
System.out.println(str);
}