Map集合与Collection集合存储数据形式的区别:
-
Collection
中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。 -
Map
中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。 -
Collection
中的集合称为单列集合,Map
中的集合称为双列集合。 -
需要注意的是,
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集合)。 -
public boolean containKey(Object key)
:判断该集合中是否有此键。 -
public Collection<V> values()
返回Map集合中的所有值到Collection集合。
注意:使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中; 若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。
Map集合遍历
方式1:键找值方式
keySet();得到Map集合中所有的键
get(Object key):通过指定的键,从map集合中找对应的值
方式2:键值对方式
通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中所有的键值对对象的集合(Set集合)。
-
public K getKey()
:获取Entry对象中的键。 -
public V getValue()
:获取Entry对象中的值
HashMap集合
Map接口实现类HashMap类特点:
-
底层哈希表结构。
-
不允许重复键。
-
用作键的对象,应该重写hashCode()方法和equals()方法。
-
-
此集合可以使用null值和null键。
-
线程不安全,运行速度快。
Properties集合
Properties集合特点:
-
继承Hashtable,底层数据结构是哈希表。
-
线程安全,运行速度慢。
-
不允许null值,null键。
-
此集合存储键值对数据类型固定为String。
-
可以和IO流结合使用,从流中加载数据。
Properties集合特有方法:
-
Object setPropery(String key,String value)
,向集合中存储键值对。 -
String getProperty(String key)
,获取集合中键对应的值,无此键返回null。 -
Set<String> stringPropertyNames()
,集合中的所有键存储到Set集合。 -
void load(输入流对象)
public static void main(String[] args){
Properties properties = new Properties();
//存储键值对
properties.setProperty("k1","v1");
properties.setProperty("k2","v2");
System.out.println(properties);
//所有的键存储到Set集合
Set<String> set = properties.stringPropertyNames();
for(String key : set){
System.out.println(key+"=="+properties.getProperty(key));
}
}
TreeMap集合
TreeMap集合基于红黑树实现,该映射根据其键的[自然顺序]进行排序,或者根据创建映射时提供Comparator
-
public Map.Entry<K,V> ceilingEntry(K key)
: 返回一个键-值映射关系,它与大于等于给定键的最小键关联;如果不存在这样的键,则返回 null。 -
public K ceilingKey(K key)
: 返回大于等于给定键的最小键;如果不存在这样的键,则返回 null。 -
public Map.Entry<K,V> firstEntry()
返回一个与此映射中的最小键关联的键-值映射关系;如果映射为空,则返回 null。 -
public Map.Entry<K,V> lastEntry()
: 返回与此映射中的最大键关联的键-值映射关系;如果映射为空,则返回 null。 -
public K firstKey()
: 返回此映射中当前第一个(最低)键。 -
public K lastKey()
:返回映射中当前最后一个(最高)键。
可变参数
在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化.
格式: 修饰符 返回值类型 方法名(参数类型... 形参名){ }
public static void main(String[] args) {
int sum = getSum(6, 7, 2, 12, 2121);
System.out.println(sum);
}
public static int getSum(int... arr) {
int sum = 0;
for (int a : arr) {
sum += a;
}
return sum;
}
注意:
-
可变参数的本质是数组。
-
不传递参数,数组的长度是0.
-
传递几个参数,数组的长度就是几。
-
-
一个方法中只能有一个可变参数。
-
如果方法中有多个参数,可变参数只能写在最后一位。
可变参数应用:
public static <T> boolean addAll(Collection<T> c, T... elements)
:往集合中添加一些元素
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
//采用工具类 完成 往集合中添加元素
Collections.addAll(list, 5, 222, 1,2);
System.out.println(list);
}