java之数组与集合
数组:
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。
1、创建数组
数组变量的声明,和创建数组可以用一条语句完成,如下所示:
DataType[] array = new DataType[arraySize];
另外,你还可以使用如下的方式创建数组。
DataType[] array = {value0, value1, ..., valuek};
代码示例:
1 public class TestArray { 2 public static void main(String[] args) { 3 // 数组大小 4 int size = 10; 5 // 定义数组 6 double[] myList = new double[size]; 7 myList[0] = 5.6; 8 myList[1] = 4.5; 9 myList[2] = 3.3; 10 myList[3] = 13.2; 11 myList[4] = 4.0; 12 myList[5] = 34.33; 13 myList[6] = 34.0; 14 myList[7] = 45.45; 15 myList[8] = 99.993; 16 myList[9] = 11123; 17 // 计算所有元素的总和 18 double total = 0; 19 for (int i = 0; i < size; i++) { 20 total += myList[i]; 21 } 22 System.out.println("总和为: " + total); 23 } 24 } 25
运行结果为:
总和为: 11367.373
2、多维数组
多维数组可以看成是数组的数组,比如二维数组,其每一个元素都是一个一维数组,例如:
1 //定义一个二维数组,其可以看成一个三行两列的数组。 2 String[][] str = new String[3][2]; 3 4 //初始化数组 5 //第一种方式 6 str[0] = {"a","b"}; 7 str[1] = {"一","二"}; 8 str[2] = {"xx","<??"}; 9 //第二种方式 10 str[0][0] = new String("Go"); 11 str[0][1] = new String("Lu"); 12 str[1][0] = new String("to"); 13 str[1][1] = new String("fo"); 14 str[2][0] = new String("我们"); 15 str[2][1] = new String("!");
3、Array 类
Array 类提供了动态创建和访问 Java 数组的方法。其构造方法私有化所以不能被实例化,类被final修饰所以不能被继承。
代码示例:
1 public class Test3 { 2 public static void main(String[] args) { 3 //创建一个数组 4 String[] strArray = (String[]) Array.newInstance(String.class, 3); 5 //往数组里添加元素 6 Array.set(strArray, 0, "wo"); 7 Array.set(strArray, 1, "哈哈"); 8 Array.set(strArray, 2, "123"); 9 System.out.println("Array.get()获取元素 >>"+Array.get(strArray, 1)); 10 System.out.println("Arrays 将数组转成字符串 >>"+Arrays.toString(strArray)); 11 } 12 }
运行结果为:
Array.get()获取元素 >>哈哈
Arrays 将数组转成字符串 >>[wo, 哈哈, 123]
4、Arrays 类
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。其比 Array 类更加灵活,在对数组操作时使用较多。
- 给数组赋值:通过 fill 方法。
- 对数组排序:通过 sort 方法,按升序。
- 比较数组:通过 equals 方法比较数组中元素值是否相等。
- 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
1 //数组赋值 2 public static void main(String[] args) { 3 Integer[] array = new Integer[5]; 4 Arrays.fill(array,0,3,9); // 给数组下标 0~2的元素填充9 5 System.out.println(Arrays.toString(array)); // 输出[9, 9, 9, null, null] 6 } 7 8 //数组排序 9 public static void main(String[] args) { 10 int[] array = {3,2,1,4,5}; 11 Arrays.sort(array); // 从小到大排序 12 //Arrays.sort(array, Collections.reverseOrder()); // 从大到小排序 13 System.out.println(Arrays.toString(array)); 14 // 输出 [1, 2, 3, 4, 5] 15 } 16 17 //数组比较,适用于一维数组 18 public static void main(String[] args) { 19 int[] array1 = {1,2,3}; 20 int[] array2 = {1,2,3}; 21 int[] array3 = {1,2,4}; 22 System.out.println(Arrays.equals(array1,array2)); //数组的比较,返回true 23 System.out.println(Arrays.equals(array1,array3)); //数组的比较,返回false 24 } 25 26 //查找数组元素 27 public static void main(String[] args) { 28 Integer[] array = {1,2,3,4,5}; 29 //binarySearch使用二分搜索法来搜索指定数组(排序后的数组,否则结果不准确) 30 //参数为要搜索的数组 要搜索的元素,返回值为元素在数组内的的下标 31 System.out.println(Arrays.binarySearch(array, 2)); // 输出 1 32 } 33 34 //上面只是列举了一些Arrays的方法,它还有很多实用的方法
集合:
本篇集合的内容主要为其基础用法,详细内容请参考:
https://www.cnblogs.com/ymzsb/p/14887610.html
java中集合是采用不同数据结构实现的存放数据的容器。其分为单例集合Collection、双列集合Map
- Collection:是单列集合的顶层接口,其下经常使用的有List(有序集合)、Set(无序集合)。
- Map:是双列集合的顶层接口,经常使用的实现类有HashMap、LinkedHashMap、Hashtable。
1、ArrayList
ArrayList实现了List接口,其是开发中最常使用的List实现类。使用示例:
1 import java.util.ArrayList; 2 3 public class RunoobTest { 4 public static void main(String[] args) { 5 //创建一个 ArrayList 其泛型为 String ,在创建集合时泛型必须为引用数据类型 6 ArrayList<String> sites = new ArrayList<String>(); 7 //1.添加元素 8 sites.add("Google"); 9 sites.add("Runoob"); 10 sites.add("Taobao"); 11 sites.add("Weibo"); 12 //输出 [Google, Runoob, Taobao, Weibo] 13 System.out.println(sites); 14 //2.访问元素 15 //参数为元素下标,执行结果,输出 Runoob 16 System.out.println(sites.get(1)); 17 //3.设置元素 18 //第一个参数为索引位置,第二个为要修改的值 19 sites.set(2, "Wiki"); 20 //输出结果为 Wiki 21 System.out.println(sites.get(2)); 22 //4.删除元素 23 String site = sites.remove(3); 24 //已经删除的元素,输出结果 Weibo 25 System.out.println(site); 26 //输出结果为[Google, Runoob, Taobao] 27 System.out.println(sites); 28 } 29 }
2、HashSet
HashSet实现了 Set 接口,其是开发中比较常用的 Set 实现类。使用示例:
1 // 引入 HashSet 类 2 import java.util.HashSet; 3 4 public class RunoobTest { 5 public static void main(String[] args) { 6 //创建一个 HashSet 其泛型为 String 7 HashSet<String> sites = new HashSet<String>(); 8 sites.add("Google"); 9 sites.add("Runoob"); 10 sites.add("Taobao"); 11 sites.add("Zhihu"); 12 // 重复的元素不会被添加 13 sites.add("Runoob"); 14 //输出 [Runoob, Taobao, Zhihu, Google] 15 System.out.println(sites); 16 //判断元素是否存在 输出true 17 System.out.println(sites.contains("Taobao")); 18 // 删除元素,删除成功返回 true,否则为 false 19 sites.remove("Taobao"); 20 //输出 [Google, Runoob, Zhihu] 21 System.out.println(sites); 22 } 23 }
3、HashMap
HashMap实现的 Map 接口,它存储的内容是键值对(key-value)映射。在开发中经常使用的 map 实现类,使用示例:
1 // 引入 HashMap 类 2 import java.util.HashMap; 3 4 public class RunoobTest { 5 public static void main(String[] args) { 6 // 创建 HashMap 对象 Sites 7 HashMap<Integer, String> Sites = new HashMap<Integer, String>(); 8 //1.添加元素 添加键值对 9 Sites.put(1, "Google"); 10 Sites.put(2, "Runoob"); 11 Sites.put(3, "Taobao"); 12 Sites.put(4, "Zhihu"); 13 //输出 {1=Google, 2=Runoob, 3=Taobao, 4=Zhihu} 14 System.out.println(Sites); 15 //2.访问元素 16 //输出 Taobao 17 System.out.println(Sites.get(3)); 18 //3.删除元素 19 Sites.remove(4); 20 //输出 {1=Google, 2=Runoob, 3=Taobao} 21 System.out.println(Sites); 22 //map的大小 23 System.out.println(Sites.size()); 24 } 25 }