何须浅碧深红色,自是花中第一流。
目录
集合
集合的概念:
java集合框架提供了一套性能优良,使用方便的接口和类,他们位于java.util包中。
Java集合框架包含的内容
-
Collection 接口存储一组不唯一,无序的对象
-
List 接口存储一组不唯一(可重复)、有序(插入顺序)的对象
-
ArrayList:底层是长度可变的数组,查询和遍历元素效率高
-
LinkedList:底层是链表,插入元素和删除元素效率高
-
-
Set 接口存储一组唯一(不可重复)、无序的对象
-
HashSet
-
-
Map接口存储一组键值对象,键唯一、值不唯一,提供key到value的映射
-
HashMap
-
List接口的实现类
-
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
-
LinkedList采用链表存储方式,插入、删除元素时效率比较高
ArrayList常用方法
方法名 | 说明 |
---|---|
boolean add(Object o) | 在列表的末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 |
int size() | 返回列表中的元素个数 |
Object get(int index) | 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
Object remove(int index) | 从列表中删除指定位置元素,起始索引位置从0开始 |
LinkedList常用方法
方法名 | 说明 |
---|---|
void addFirst(Object o) | 在列表的首部添加元素 |
void addLast(Object o) | 在列表的末尾添加元素 |
Object getFirst() | 返回列表中的第一个元素 |
Object getLast() | 返回列表中的最后一个元素 |
Object removeFirst() | 删除并返回列表中的第一个元素 |
Object removeLast() | 删除并返回列表中的最后一个元素 |
Set接口:
-
Set接口存储一组唯一,无序的对象
-
HashSet是Set接口常用的实现类
-
Set中存放对象的引用
Set set=new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String("JAVA");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size());
Set接口如何判断加入对象是否已经存在呢?
Set set=new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String ("java");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size());
HashSet是Set接口常用的实现类
Set newsTitleSet = new HashSet();
NewTitle car = new NewTitle(1, "汽车", "管理员");
//增加元素
newsTitleSet.add(car);
//获取元素个数
System.out.println("新闻标题数目为:" + newsTitleList.size() + "条");
Map接口:
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
注:最常用的实现类是HashMap
Map接口常用方法:
方法名 | 说明 |
---|---|
Object put(Object key, Object val) | 以“键-值”对的方式进行存储 |
Object get(Object key) | 根据键返回相关联的值,如果不存在指定的键,返回null |
Object remove(Object key) | 删除由指定的键映射的“键-值对” |
int size() | 返回元素个数 |
Set keySet() | 返回键的集合 |
Collection values() | 返回值的集合 |
boolean containsKey(Object key) | 如果存在由指定的键映射的“键-值对”,返回true |
写出遍历集合的方法
-
List集合:普通for循环、增强for循环、迭代器
-
Set集合:增强for循环、迭代器
-
Map集合:增强for循环、迭代器、键值对遍历
public static void main(String[] args) { // 准备容器,创建HashMap对象 Map hm = new HashMap(); // 准备元素并将元素存储到集合中 hm.put("CN", "中华人民共和国"); hm.put("JP", "日本"); hm.put("RU", "俄罗斯联邦"); hm.put("USA", "美国"); hm.put("UK", "英国"); // 获取集合中元素个数 System.out.println(hm.size()); // 根据键获取对应的值 Object obj1 = hm.get("CN"); String str1 = (String) obj1; System.out.println(str1); System.out.println(hm.get("CNN"));// null // 删除集合中的元素 Object obj2 = hm.remove("JP"); String str2 = (String) obj2; System.out.println(str2); System.out.println(hm.size()); System.out.println("********************************************"); // 获取HashMap集合中所有键值对的键 Set keys = hm.keySet(); for (Object object : keys) { String key = (String) object; System.out.println(key); } System.out.println("********************************************"); // 获取HashMap集合中键值对的值 Collection values = hm.values(); for (Object object : values) { String balue = (String) object; System.out.println(values); } // 查询集合中是否存在指定键对应的键值对 System.out.println("RU");// true System.out.println("JP");// false System.out.println("*********************************************"); // 遍历键值对的三种方式 // 方式一:获取键的集合,然后在遍历键的集合过程中调用get()方法取值 Set keys2 = hm.keySet(); for (Object object : keys2) { // 获得键 String key = (String) object; // 根据键获取值 Object obj = hm.get(key); String value = (String) obj; System.out.println(key + "---" + value); } System.out .println("**************************************************"); // 方式二、获取键的集合,然后在遍历键的集合过程中调用get()方法取值 Set keys3 = hm.keySet(); Iterator it = keys3.iterator(); while (it.hasNext()) { // 获得键 Object object = it.next(); String key = (String) object; // 根据键获取值 Object obj = hm.get(key); String value = (String) obj; System.out.println(key + "---" + value); } System.out.println("***************************************"); /* * 方式三、键值对遍历,将hm集合中的键值对整体取出来后放入到Set集合中 * * 使用entrySet()方法将hm集合中的键值对整体取出来嵌在Set集合中 * 然后使用增强for循环或者迭代器取出Set集合中的键值对元素,取出来的是Object类型,实际上键值对的真正类型是Map.Entry类型 * 所以将取出来的元素强制转换为Map * .Entry类型,Map.Entry类中有getKey()方法获取键值对的键,有getValue()方法获取键值对的值 */ Set keyValues = hm.entrySet(); for (Object object : keyValues) { Map.Entry me = (Map.Entry) object; // 获取键 Object object1 = me.getKey(); String key = (String) object1; // 获取值 Object object2 = me.getValue(); String value = (String) object2; System.out.println(key + "---" + value); } }
总结:
变量:存储数据的空间(装数据的容器),变量中只能存储一个数据,通过操作变量名来操作数据 数组:存储数据的空间(装数据的容器),数组中可以存储多个相同类型的数据,通过数组名+下标来操作数据 对象(类):存储数据的空间(装数据的容器),通过对象的属性达到存储数据的目的,通过对象名.属性名或者通过对象名.getXxx()/setXxx()方法来获取和设置数据 集合:存储数据的空间(装数据的容器),集合中可以存储多个不同类型的数据(系统会将不同类型的数据向上转型变为Object类型),通过集合对象.方法来操作数据
综上所述:凡是能够装数据的,都可以看成是容器