一、数组
数组是一个变量,存储相同数据类型的一组数据。
1.定义数组:
类型[] 数组名 = new 类型[长度];
类型[] 数组名; 数组名 = new 类型[长度];
类型[] 数组名 = new 类型[]{值1,值2,值3};
类型[] 数组名 = {值1,值2,值3};
2.数组赋值
scores[0] = 89;
scores[1] = 79;
scores[2] = 76;
int[ ] scores = {89, 79, 76};
int[ ] scores = new int[ ]{89, 79, 76};
//键盘输入赋值
Scanner input = new Scanner(System.in);
for(int i = 0; i < 30; i ++){
scores[i] = input.nextInt();
}
3.获取数组长度:
数组名.length
练习1:
有一个数列:8,4,2,1,23,344,12。题目要求:循环输出数列的值, 求数列中所有数值的和。猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数。
方法一:
public class ShuZu {
public static void main(String[] args) {
int[] number = new int[]{8, 4, 2, 1, 23, 344, 12};
int sum = 0;
for (int i = 0; i < 7; i++) {
System.out.println("number[" + i + "] = " + number[i]);
sum += number[i];
}
System.out.println("和为:" + sum);
Scanner number2 = new Scanner(System.in);
System.out.println("请输入一个随机数:");
int n = number2.nextInt();
int m = 0;
for (int i = 0; i < 7; i++) {
if (n == number[i]) {
System.out.println("该数组包含该随机数");
break;
}
m++;
}
if(m == 7)
System.out.println("该数组不包含该随机数");
}
}
方法二:
import javax.xml.transform.Source;
import java.util.Scanner;
public class DemoF {
public static void main(String[] args) {
int[] number = { 8,4,2,1,23,344,12};
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数值:");
int locNum = input.nextInt();
int sum = 0;
boolean isOk = false;
for (int i = 0; i < number.length; i++) {
System.out.println(number[i]);
sum += number[i];
if(locNum == number[i]){
isOk = true;
}
}
System.out.println("和:"+sum);
System.out.println(isOk?"包含:"+locNum:"不包含:"+locNum);
}
}
4.二维数组
存值语法:
数组名[下标1][下标2] = 值;
二、冒泡排序和选择排序
1.冒泡排序
原理:
-
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
算法实现:
int[] number = {8, 4, 2, 1, 23, 344, 12};
for (int i = 0; i < number.length - 1; i++) {
for (int k = 0; k < number.length - 1 - i; k++) {
if (number[k] > number[k + 1]) {
int tmp = number[k];
number[k] = number[k + 1];
number[k + 1] = tmp;
}
}
}
System.out.println(Arrays.toString(number));
2.选择排序
原理:
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
代码实现:
int[] number = {8, 4, 2, 1, 23, 344, 12};
int index;
for (int i = 0; i < number.length - 1; i++) {
index = i;
for (int k = i; k < number.length; k++) {
if(number[k] < number[index]){
index = k;
}
}
int tmp = number[i];
number[i] = number[index];
number[index] = tmp;
}
System.out.println(Arrays.toString(number));
练习2:
int[] numbers = {8,5,9,87,7,12,85,32,112,47,28,4,55,2,56,74}; 要求 将 29 按照顺序 插入到当前 数组中。实现思路(创建 大于当前numbers数组一位长度的新数组,将数据按照顺序导入到新的数组中,使用循环找出 29 应该所在的下标, 将 29 所在下标后的数据 全部后移一位, 将 29 插入新的数组。)
方法一:
import java.util.Arrays;
public class HuanShuZu {
public static void main(String[] args) {
int[] numbers = {8,5,9,87,7,12,85,32,112,47,28,4,55,2,56,74};
System.out.println("原数组:"+ Arrays.toString(numbers));
Arrays.sort(numbers);
System.out.println("排序后:"+Arrays.toString(numbers));
int[] newnumbers = Arrays.copyOf(numbers, numbers.length+1);
System.out.println("复制后:"+Arrays.toString(newnumbers));
int n = 0;
int num = 29;
for (int i = 0; i < newnumbers.length; i++) {
if(num < newnumbers[i]){
n=i;
break;
}
}
for (int i = newnumbers.length-1; i > n; i--) {
newnumbers[i] = newnumbers[i-1];
}
newnumbers[n] = num;
System.out.println("插入后:" + Arrays.toString(newnumbers));
}
}
方法二:
import java.util.Arrays;
public class DemoB {
public static void main(String[] args) {
int[] numbers = {8,5,9,87,7,12,85,32,112,47,28,4,55,2,56,74};
// 显示原数组
System.out.println("原数组:"+Arrays.toString(numbers));
Arrays.sort(numbers);//完成排序
System.out.println("排序后数组:"+Arrays.toString(numbers));
// int[] newNumbers = new int[numbers.length + 1];
// for (int i = 0; i <numbers.length ; i++) {
// newNumbers[i] = numbers[i];
// }
//Arrays.copyOf(原数组,长度) 复制数组元素到一个新的数组中
int[] newNumbers = Arrays.copyOf(numbers,numbers.length + 1);
//复制数组 长度 +1(为 29 元素 腾出位置)
System.out.println("复制后的数组:"+Arrays.toString(newNumbers));
//声明 变量 index 标记29的位置 预计29是最小的 下标为0
int index = 0;
int num = 29;// 需要插入到数组中的元素
for (int i = 0; i < newNumbers.length ; i++) {
if(num <newNumbers[i]){
//记录 插入元素应该所在的下标
index = i;
break;
}
}
//将num 元素所在下标的 所有后位元素 后移一位
for (int i = newNumbers.length - 1; i > index ; i--) {
newNumbers[i] = newNumbers[i-1];
}
//将元素放入新的数组
newNumbers[index] = num;
System.out.println("插入元素后的数组:"+Arrays.toString(newNumbers));
// 倒序显示数组
for (int i = newNumbers.length-1 ; i >=0 ; i--) {
System.out.print(newNumbers[i]+",");
}
}
}
补:反转排序
import java.util.Arrays;
public class DemoC {
public static void main(String[] args) {
int[] numbers = {8,5,9,87,7,12,85,32,112,47,28,4,55,2,56,74};
// 反转排序
for (int i = 0; i < numbers.length / 2; i++) {
int temp = numbers[i];
numbers[i] =numbers[numbers.length-i-1];
numbers[numbers.length-i-1] = temp;
}
System.out.println(Arrays.toString(numbers));
}
}
三、集合
1.List接口
List 接口存储一组不唯一,有序(插入顺序)的对象
List下有
ArrayList:查询快;
Vector:查询快,安全;
LinkedList:增删快。
定义代码:
ArrayList<String> arrayList = new ArrayList<>();
Vector<String> vector= new Vector<>();
LinkedList<String> linkedList= new LinkedList<>();
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class DemoA {
public static void main(String[] args) {
// 通过List接口 创建 ArrayList集合
// 基本数据类型 byte short int long float double boolean char
//List<泛型> 指定泛型后 只能放入符合泛型类型的数据进入集合中
//未指定泛型 类型默认为 Object 可以存储任何类型
List<String> list = new ArrayList<>();
// 向集合中增加数据 使用了 ArrayList的 add(值) 返回结果为 boolean true 添加成功 false 添加失败
boolean isOk = list.add("张三");
System.out.println(isOk);
list.add("李四");
list.add("王五");
// 新增数据到固定的下标
list.add(1,"测试数据");
System.out.println("获取集合长度:" + list.size());
System.out.println("根据下标获取集合元素:"+list.get(2));
// 通过contains(值) 检测集合中是否存在 对应值 存在 true 不存在 false
System.out.println("检查集合中是否存在王五:" + list.contains("王五"));
//list.remove(3);//通过下标删除 集合元素
list.remove("王五"); //通过元素 删除集合中的元素
System.out.println("检查集合是否为空:"+list.isEmpty());
// list.clear(); //清空集合
//遍历集合
for (String str:list) {
System.out.println(str);
}
List<String> newList = list.subList(0,2);//取集合第0位到第2位
for (String str:newList) {
System.out.println(str);
}
//
Object[] strs = list.toArray();
System.out.println(Arrays.toString(strs));
//
Iterator<String> iterator = list.iterator();
// iterator.hasNext() 返回boolean true 存在下一条数据
while (iterator.hasNext()){
String str = iterator.next();
System.out.println(str);
}
}
}
import java.util.ArrayList;
import java.util.List;
public class DemoD {
public static void main(String[] args) {
List<String> listA = new ArrayList<>();
listA.add("A");
listA.add("B");
listA.add("C");
List<String> listB = new ArrayList<>();
listB.add("B");
listB.add("C");
listB.add("D");
//获取 lsitA 与 listB的交集数据
// listA.retainAll(listB);
//获取 listA 与 listB的差集
listA.removeAll(listB);
//将listA 与 listB 合并
listA.addAll(listB);
//显示集合listA
System.out.println(listA);
}
}
2.Set接口
Set 接口存储一组唯一,无序的对象
Set下有
HashSet:无序,唯一;
LinkedHashSet:插入有序,唯一;
TreeSet:有序,唯一。
定义代码:
HashSet<String> hashSet = new HashSet<>();
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
TreeSet<String> treeSet = new TreeSet<>();
应用:
import java.util.*;
public class DemoE {
public static void main(String[] args) {
//通过set接口创建 HashSet
Set<String> set = new HashSet<>();
// 向集合中增加数据 使用了 ArrayList的 add(值) 返回结果为 boolean true 添加成功 false 添加失败
boolean isOk = set.add("张三");
System.out.println(isOk);
set.add("李四");
set.add("王五");
set.add("王五");
set.add("王五");
System.out.println("获取集合长度:" + set.size());
// 通过contains(值) 检测集合中是否存在 对应值 存在 true 不存在 false
System.out.println("检查集合中是否存在王五:" + set.contains("王五"));
// set.remove("王五"); //通过元素 删除集合中的元素
System.out.println("检查集合是否为空:"+set.isEmpty());
// set.clear(); //清空集合
for (String str:set) {
System.out.println(str);
}
System.out.println("--------------------------------");
Object[] strs = set.toArray();
System.out.println(Arrays.toString(strs));
System.out.println("--------------------------------");
Iterator<String> iterator = set.iterator();
// iterator.hasNext() 返回boolean true 存在下一条数据
while (iterator.hasNext()){
String str = iterator.next();
System.out.println(str);
}
}
}
3.Map接口
import java.util.*;
public class DemoF {
public static void main(String[] args) {
// 通过 map接口 创建了HashMap
Map<String, String> stringMap = new HashMap<>();
// 将数据保存到map集合中
stringMap.put("ES","西班牙 ");
stringMap.put("NL","荷兰");
stringMap.put("AF","阿富汗-测试");
stringMap.put("AF","阿富汗");
stringMap.put("AR","阿根廷");
stringMap.put("AU","澳大利亚");
//通过key 获取value
System.out.println("通过get(key)获取value:"+stringMap.get("AF"));
System.out.println("通过size()方法获取map 集合长度:"+stringMap.size());
System.out.println("集合是否为空:"+stringMap.isEmpty());
System.out.println("通过containsKey(key)判断key是否存在: "+stringMap.containsKey("AU"));
System.out.println("通过 containsValue(value) 判断value是否存在: "+stringMap.containsValue("阿根廷"));
stringMap.replace("AR","阿根廷-测试替换方法");
System.out.println("通过get(key)获取value:"+stringMap.get("AR"));
//通过key 删除 value
stringMap.remove("AR");
System.out.println("-------------------------------");
// 通过keySet()方法 获取map集合的所有key
Set<String> keys = stringMap.keySet();
for (String key:keys) {
System.out.println("key:"+key+",value:"+stringMap.get(key));
}
System.out.println("-------------------------------");
Iterator<String> values = stringMap.values().iterator();
while (values.hasNext()){
System.out.println(values.next());
}
System.out.println("-------------------------------");
Iterator<String> iteratorkeys = stringMap.keySet().iterator();
while (iteratorkeys.hasNext()){
String key = iteratorkeys.next();
System.out.println("key:"+key+",value:"+stringMap.get(key));
}
}
}
练习3:
代码实现:
import java.util.*;
public class LianXi {
public static void main(String[] args) {
Random random = new Random();
List<Integer> list = new ArrayList<>();
// System.out.println(random.nextInt(100)+1);
int[] number = new int[10];
for (int i = 0; i < 10; i++) {
number[i] = random.nextInt(100)+1;
if(number[i] > 10){
list.add(number[i]);
}
}
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
Integer str = iterator.next();
System.out.println(str);
}
}
}
import java.util.*;
public class Lianxi2 {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1,"张三丰");
map.put(2,"周芷若");
map.put(3,"汪峰");
map.put(4,"灭绝师太");
Iterator<Integer> iteratorkeys = map.keySet().iterator();
while (iteratorkeys.hasNext()) {
Integer key = iteratorkeys.next();
System.out.println("key:" + key + ",value:" + map.get(key));
}
map.put(5,"郭靖");
map.remove(1);
map.replace(2,"周林");
}
}