个人笔记之数组、集合
一.什么是数组(Array)
定义:数组就是一系列相同类型数据的有序集合。
数组通常由若干同类型的数据通过先后次序排列而成,每一个数据称为元素,每一个元素都拥有一个唯一的下标,该下标从零开始。
特点:
1.有限性。数组的长度是有限的。
2.同类型。数组中的元素必须是同种类型,不允许类型混杂。
3.数组是引用数据类型。数组也可以看成对象,每个元素相当于该对象的成员变量。
二.数组的创建
数组的声明:
类型[] 数组名 = new 类型[长度];
例:int[] arr = new int[10];
解释:创建一个int类型的数组,然后指向一个存放该数组空间,设置数组长度为10(也就是说该数组中存放着10个元素)。
String[] arr = new String[10];
解释:举一反三,这里是创建一个String类型的数组,然后指向一个存放该数组空间,设置数组长度为10。
byte[] arr = new byte[10];
三.数组的基本操作
1. for 循环遍历数组
int[] arr = new int[10];
for(int i = 0 ; i<arr.length ; i++){
System.out.println(arr[i]);
}
//此时没有对数组中的元素赋值,默认所有元素的值都为0,所以此次遍历结果为输出十个零。
利用for循环,遍历数组中的每一个元素,并且打印出来来。
这样我们可以利用for循环对数组中的数据进行一些操作,比如赋值排序都可以对每一个元素操作。
2.增强for循环
int[] arr = new int[10];
for(int a : arr ){
System.out.println(a);
}
这样能和上面的for循环达成一样的结果。
四.常见数组(集合)浅谈
//List,Map,Set均继承自Collection
public class PracticeList {
public static void main(String[] args) {
//创建一个ArrayList列表
//ArrayList列表算是比较常用的动态数组
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);
System.out.println("=============");
//创建一个Map<K,V>列表,存入数据并打印
//Map通过键值对存取数据,通过键寻找对应的值很容易找到,节省时间,也有利于修改对应位置的数值
Map<Integer, Integer> map = new HashMap<>();
map.put(1,1);
map.put(2,2);
map.put(3,3);
System.out.println(map);
System.out.println("==============");
//Set无序数组,HashSet号称查找最快的数组,通过HashCode实现的
//Set是一种不允许重复元素出现的无序集合,但虽说是无序但还是根据自己的规则内部排序的
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
System.out.println(set);
}
}
最常见的就是ArrayList和HashMap,所以其他见得相对比较少。
迭代问题:
关于三种集合的遍历:
System.out.println("@@@@@@@@@@@@@@@迭代@@@@@@@@@@@@@@@@@");
System.out.println("list遍历:---------------");
//增强for循环遍历
for(Integer temp : list){
System.out.print(" <"+temp+"> ");
}
//迭代器遍历
System.out.println();
//来个迭代器
Iterator<Integer> it = list.iterator();
//循环输出,若有下一位存在就执行
while(it.hasNext()){
//输出这一位的内容
System.out.print(" <"+it.next()+"> ");
}
System.out.println();
System.out.println("Map遍历:---------------");
//先将MAP转为Set数组再遍历
Set<Map.Entry<Integer, Integer>> setMap = map.entrySet();
//增强for循环遍历
for(Map.Entry<Integer, Integer> temp : setMap){
System.out.print(" <"+temp.getKey()+" + "+temp.getValue()+"> ");
}
//迭代器遍历
System.out.println();
Iterator<Map.Entry<Integer, Integer>> itMap = setMap.iterator();
while(itMap.hasNext()){
//此处接收一下,不然没法打印出Key和Value
Map.Entry<Integer, Integer> temp1=itMap.next();
System.out.print(" <"+temp1.getKey()+" + "+temp1.getValue()+"> ");
}
System.out.println();
System.out.println("Set遍历:---------------");
System.out.println("同Map");
练习:
/*
- 定义一个数组,存储一个班学生的成绩
- 人数由手动输入,成绩范围[0,150]
- */
package com.cl.practice;
import java.util.*;
/*
* 定义一个数组,存储一个班学生的成绩
* 人数由手动输入,成绩范围[0,150]
* */
public class Practice001 {
public static void main(String[] args) {
/* 定义一个输入方法,用接收输入的班级人数 */
Scanner scan = new Scanner(System.in);
System.out.print("请输入班级人数:");
int len = scan.nextInt();
// 接收返回的数组
int[] arr = getArray(len);
// int arr1[] = getArray(len); 用的少 //
System.out.println("同学们的分数分别是:" + Arrays.toString(arr));
}
// 写一个定义随机数组的方法getArray()
// 带参,返回数组
public static int[] getArray(int len){
// 创建一个随机数对象
Random rand = new Random();
// 初始化一个长度为len的数组
int[] arr = new int[len];
for (int i = 0; i < arr.length; i++) {
// 用数组中的数据接收随机数,随机数范围为[0,150]
arr[i]=rand.nextInt(151);
}
// 返回arr
return arr;
}
}
for (int i = 0; i < arr.length; i++) {
// 用数组中的数据接收随机数,随机数范围为[0,150]
arr[i]=rand.nextInt(151);
}
// 返回arr
return arr;
}
}