Java基础
7月7日开始学习《Java从小白到大牛》
对象容器——集合
集合是什么?
集合是基于某种数据机构的容器
Java中提供了丰富的集合接口和类,它们来自于 java.util 包。
Java 集合类型分为:Collection 和 Map
Collection 子接口有:Set、Queue 和 List 等接口。每一种集合接口᧿述了一种数据结构。
任何集合中存放的都是对象,即引用数据类型,基本数据类型不能放到集合
中
List集合
-
List 集合中的元素是有序的,可以重复出现,可以通过序号访问
-
List集合关心的元素是否有序,而不关心是否重复
-
ArrayList 是基于动态数组数据结构的实现
-
LinkedList是基于链表数据结构的实现
二者比较: ArrayList 访问元素速优于 LinkedList,LinkedList占用的内存空间比较大,但 LinkedList 在批量插入或删除数据时优于 ArrayList。
常用方法
//HelloWorld.java文件
import java.util.ArrayList;//通过ArrayList实现
import java.util.List;
import java.util.Iterator;//迭代器
public class HelloWorld {
public static void main(String[] args) {
List list = new ArrayList();
String b = "B";
//向集合中添加元素
list.add("A");
list.add(b); //只能添加引用数据类型
list.add("C");
list.add(b);
list.add("D");
list.add("E");
//打印集合元素个数
System.out.println("集合size = " + list.size());
//打印集合
System.out.println(list);
//从前往后查找集合中的"B"元素
System.out.println("indexOf(\"B\") = " + list.indexOf(b));
//从后往前查找集合中的"B"元素
System.out.println("lastIndexOf(\"B\") = " + list.lastIndexOf(b));
//删除集合中第一个"B"元素
list.remove(b);
System.out.println("remove(3)前: " + list);
//判断集合中是否包含"B"元素
System.out.println("是否包含\"B\":" + list.contains(b));
//删除集合第4个元素
list.remove(3);
System.out.println("remove(3)后: " + list);
//判断集合是否为空
System.out.println("list集合是空的:" + list.isEmpty());
System.out.println("替换前:" + list);
//替换集合第2个元素
list.set(1, "F");
System.out.println("替换后:" + list);
//清空集合
list.clear();
System.out.println(list);
// 重新添加元素
list.add(1);//发生自动装箱,整数1被封装成Integer对象1,然后再放入到集合中
list.add(3);
int item = (Integer) list.get(0);//发生自动拆箱,从集合中取出的也是对象 } }
}
}
遍历集合
- 使用 for 循环遍历
- 使用 for-each 循环遍历
- 使用迭代器遍历:Java 提供了多种迭代器,List 集合可以使用 Iterator 和 ListIterator迭代器
//for循环
for (int i = 0; i < list.size(); i++) {
System.out.printf("读取集合元素(%d): %s \n", i, list.get(i));
System.out.println(list.get(i));
}
//for each循环
for (Object item:list) {
String s=(String) item;//强制将object类型转化为String 类型
System.out.println(s);
}
//迭代器遍历
Iterator it=list.iterator();
while(it.hasNext()){//判断是否还有元素可以迭代
Object item=it.next();//调用迭代器的 next()返回迭代的下一个元素
String s=(String) item;//Object 类型强制转换为 String 类型
System.out.println(s);
}
Set集合
-
Set 集合是由一串无序的,不能重复的相同类型元素构成的集合,不能用序号表示
-
当不考虑顺序,且没有重复元素时,Set集合和List集合可以互相替换的。
-
Set 接口直接实现类主要是 HashSet,HashSet 是基散列表数据结构的实现。
-
Set 接口也继承自 Collection 接口,Set 接口中大部分都是继承自 Collection 接口
基本用法
import java.util.Set;
import java.util.HashSet;
public class Try {
public static void main(String[] args) {
Set set=new HashSet() ;//用Hashset类 实例化
set.add("1");
set.add("2");
set.add("3");
set.add("4");
//打印元素个数
System.out.println(set.size());
//打印集合元素
System.out.println(set);
// 删除集合中第一个"2"元素
set.remove(2);
// 判断集合中是否包含"2"元素
System.out.println("是否包含\"2\":" + set.contains(2));
// 判断集合是否为空
System.out.println("set集合是空的:" + set.isEmpty());
// 清空集合
set.clear();
System.out.println(set);
}
}
set遍历
//for each循环
for (Object item: set) {
String s=(String) item;
System.out.println(s);
}
Iterator it=set.iterator();//先需要获得迭代器对象
while (it.hasNext()){ //判断集合中是否还有元素可以迭代
Object item= it.next();
String s=(String) item;
System.out.println(s);
}
Map集合
- Map(映射)集合表示一种非常复杂的集合,允许按照某个键来访问元素。
- Map 集合是由两个集合构成的,一个是键(key)集合,一个是值(value)集合。
- 键集合是 Set 类型,因此不能有重复的元素。
- 值集合是 Collection 类型,可以有重复的元素
- Map 集合中的键和值是成对出现的
- Map 接口直接实现类主要是** HashMap**,HashMap 是基散列表数据结构的实现。
Map就像查英文字典一样,键就是要查的英文单词,而值是英文单词的翻译和解释等。有的时候,一个英文单词会对应多个翻译和解释,这是与Map集合特性对应的。
Map方法
- get(Object key):返回指定键所对于的值;如果 Map 集合中不包含该键值对,则返回 null。
- † put(Object key, Object value):指定键值对添加到集合中。
- size():返回 Map 集合中键值对数。
- keySet():返回 Map 中的所有键集合,返回值是 Set 类型。
- values():返回 Map 中的所有值集合,返回值是 Collection 类型。
import java.util.Iterator;//迭代器
import java.util.HashMap;
import java.util.Map;
public class Try {
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"a");
map.put(2,"b");
map.put(1,"c");//1键已经存在,替换原来值"a"
map.put(3,"d");
System.out.println(map.size());
System.out.println(map);
//通过键取值
System.out.println(map.get(1));//如果不存在键值对,则返回 null
//删除键值对
map.remove(1);
// 键集合中是否包含
System.out.println( map.containsKey(1));
//值集合中是否包含
System.out.println("a");
//判断集合是否为空
System.out.println(map.isEmpty());
// 清空集合
map.clear();
System.out.println(map);
}
}
Map遍历
Map 集合遍历与 List 和 Set 集合不同,Map 有两个集合,因此遍历过程可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都可以使用 for-each循环和迭代器进行遍历。
// 1.使用for-each循环遍历
Set keys = map.keySet(); // 获得键集合
for (Object key : keys) {
int ikey = (Integer) key; // 自动拆箱
String value = (String) map.get(ikey); // 自动装箱
System.out.printf("key=%d - value=%s \n", ikey, value);
}
// 2.使用迭代器遍历
Collection values = map.values(); // 获得值集合
// 遍历值集合
Iterator it = values.iterator();
while (it.hasNext()) {
Object item = it.next();
String s = (String) item;
System.out.println("值集合元素: " + s);
}