集合是java中提供的一种容器,可以用来存储多个数据。
集合和数组的区别:
- 数组的长度是固定的,集合的长度是可变的。
- 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
Collection的常用功能:
- add():把给定的对象添加到当前集合中 。
- clear():清空集合中所有的元素。
- remove(E e): 把给定的对象在当前集合中删除。
- contains(E e): 判断当前集合中是否包含给定的对象。
- isEmpty(): 判断当前集合是否为空。
- size(): 返回集合中元素的个数。
- toArray(): 把集合中的元素,存储到数组中。
- contains():集合是否包含某个元素。
List:
- ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素。
- LinkedList 底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素。
- Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素。
ArrayList较为常用,现做详细讨论。
java.util.ArrayList 本质是可变数组,存储在内的数据称为元素。此类提供一些方法来操作内部存储 的元素。 ArrayList 中可不断添加元素,其大小也自动增长。
书写格式:ArrayList<E> list = new ArrayList<>(); 其中E为泛型,可以String, 某个类等类型。
代码示例:
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<Student>();
Student s = new Student("张三");
Student s1 = new Student("李四");
Student s2 = new Student("王五");
list.add(s);
list.add(s1);
list.add(s2);
}
}
ArrayList的遍历:
1.使用for循环:
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<Student>();
Student s = new Student("张三");
Student s1 = new Student("李四");
Student s2 = new Student("王五");
list.add(s);
list.add(s1);
list.add(s2);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
2.使用Iterator迭代集合中元素:
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
String s = "张三";
String s1 = "李四";
String s2 = "王五";
list.add(s);
list.add(s1);
list.add(s2);
Iterator<String> it = list.iterator();
while(it.hasNext()){
String ss = it.next();
System.out.println(ss);
}
}
}
Set:使用较少,它与list的区别:
- list是有序的,set是无序的。
- list元素可以重复,set不能重复,重复的会覆盖。
- list可以直接通过索引获取元素,set不能。
Map:
- Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
- Map 中的集合,元素是成对存在(键值对)的,每个元素由键与值两部分组成,通过键可以找对所对应的值。
- Collection 中的集合称为单列集合, Map 中的集合称为双列集合。
- Map 中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
常用方法:
- public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
- public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的 值。
- public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
- public Set<k> keySet() : 获取Map集合中所有的键,存储到Set集合中。
- public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "汽车");
map.put(2, "苹果");
map.put(3, "桃子");
System.out.println(map); //输出
System.out.println(map.remove(1));
System.out.println(map);
System.out.println(map.get(2));
System.out.println(map.get(3));
}
}
Map集合遍历键找值方式:
import java.util.HashMap;
import java.util.Set;
public class Test {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String,String>();
//添加元素到集合
map.put("胡歌", "霍建华");
map.put("郭德纲", "于谦");
map.put("薛之谦", "大张伟");
Set<String> keys = map.keySet();
// 增强for循环,遍历键集 得到 每一个键
for (String key : keys) {
//key 就是键
//获取对应值
String value = map.get(key);
System.out.println(key+"的CP是:"+value);
}
}
}
Map集合遍历键值对方式:
HashMap<String, String> map = new HashMap<String,String>();
// 添加元素到集合
map.put("胡歌", "霍建华");
map.put("郭德纲", "于谦");
map.put("薛之谦", "大张伟");
// 获取 所有的 entry对象 entrySet
Set<Entry<String,String>> entrySet = map.entrySet();
// 遍历得到每一个entry对象
for (Entry<String, String> entry : entrySet) {
// 解析
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"的CP是:"+value);
}