java学习--MAP集合类

1.map集合遍历方式 :keyset()方法

得到map集合中所有的键,装到set集合中;然后可通过set集合作遍历。

public class mapdemo {

public static void main(String[] args) {

//1.调用map集合的方法keyset,把所有的键存储到set集合中

//2.遍历set集合,获取出set中所有元素(map中所有的键)

//3.调用map集合方法,由键获取值(map中本身没有迭代器,不能遍历)

//这里返回的keyset其实是hashmap中的一个内部类集合

Map<String,Integer>map = new HashMap<String,Integer>();

map.put("a", 11);

map.put("b", 12);

map.put("c", 13);

map.put("d", 14);

map.put("e", 15);

/*Set<String> set = map.keySet();

Iterator<String> it = set.iterator();

while(it.hasNext()) {

String key = it.next();

Integer value = map.get(key);

System.out.println(key+"......"+value);//map必须借用set第三方集合才能用来遍历

}*/

//利用增强for遍历,比用迭代器容易,代码量下降

System.out.println("==================================================");

for(String key : map.keySet()) {//增强for循环,实际上增强for编译完了就是迭代器

Integer value = map.get(key);

System.out.println(key+"="+value);

}

}

}

2.map集合遍历方式:entrySet方法 键值对的映射关系

Entry键值对对象

在map类设计时,提供了一个嵌套接口:entry;Entry将键值对的映射关系(集合中键值的映射关系:结婚证)封装成了对象

Entry是Map接口中提供的一个静态内部嵌套接口

实现步骤:

(1)调用map集合方法entrySet(),将集合中映射关系对象存储到Set集合

Set<Entry <k,v>> 此处为一个泛型的嵌套

(2)迭代Set集合

(3)获取出的Set集合的元素是映射关系对象

(4)通过映射关系对象中的方法getKey,getValue获取键值对

该种方式比keySet方式更简单

增强for循环:Collection接口有个父接口Iterable<>,该接口下的实现类均可用增强for循环,而该接口下没有map,因此不能map不能用增强for循环直接遍历,但是可以通过Set遍历,即增强for间接遍历map

增强for中:左边为键值 右边为map.xxset

3.HashMap集合存储和遍历

public class HashMapDemo1 {

// 使用hashmap集合,存储自定义对象,该对象可以作为键出现也可以作为值出现

// 使用hashmap集合存儲自定義對象person,作为值出现

public static void main(String[] args) {

funtion();

}

private static void funtion() {

// TODO Auto-generated method stub

HashMap<String, Person> map = newHashMap<String, Person>();

map.put("HeiFei", new Person("a", 20));

map.put("B", new Person("b", 30));

// 键的对象是字符串,可以保证唯一性

// 如果自定义对象作为键(此处是值),需要重写hashcode equals才能保证键的唯一性,可直接自动重写

for (String key : map.keySet()) {

Person value = map.get(key);

System.out.println(key + "=" +value);

}

System.out.println("==================");//用Entry方式再遍历一次

for (Map.Entry<String, Person> entry :map.entrySet()) {

String key = entry.getKey();

Person value = entry.getValue();

System.out.println(key + "..." +value);

}

}

}

4.LinkedHashMap

继承自HashMap,保证了迭代的顺序,所遇到的所有集合都是线程不安全的(运行速度快)

5.Hashtable的特点

Map接口的又一个实现类:Hashtable

底层数据结构为哈希表,特点和HashMap是一样的

特点区别:属于线程安全集合,运行速度较慢(故被抛弃),与Vector一样,从jdk1.2开始被更先进的hashmap取代;

而Hashmap属于线程不安全的集合,运行速度快,允许存储null值和键(HashTable不允许存储null )

虽然Hashtable挂了,但是他的孩子子类Properties(可和io流共同配合,实现数据的持久存储,集合本身都是内存里的东西而已)——依然活跃在开发舞台

6.静态导入(jdk 1.5新特性)

作用:简化一些代码,减少开发的代码量,实际用处一般

标准写法:导入包的时候才能使用

7.方法的可变参数VarArgumentsDemo

jdk1.5新特性;

比如说计算整数和,一开始是计算两个整数和,然后要求变成三个。。。。。要求随时会变,方法不可能简单的无限定义下去。

前提:方法的参数数据类型确定,但是参数个数可变

public class VarArgumentsDemo {

public static void main(String[] args) {

//调用一个带有可变参数的方法时,传递参数的个数可任意

int sum =getSum(1,3,6,4,6);

System.out.println(sum);

}

public static int getSum(int...a) {//注意方法中可变参数的写法;数据类型。。。变量名(只有三个点).此处a的本质就是一个数组

System.out.println(Arrays.toString(a));//若运行结果为“[I******”表明该参数为一个数组

int sum = 0;

for(int i : a ) {

sum = sum + i;

}

return sum;

}

}

注意事项:一个方法中可变参数只有一个(不然在函数调用的时候你也不晓得是传给哪个参数)(注意是可变参只有一个不是说参数只能有一个);

可变参数必须写在参数列表的最后一位 : fun(int a,int b,int...c)

若写成fun(Objiect...c)则随便传参数类型

8.Collections集合的工具类--CollectionsDemo1

collection:util包中的根接口

Collections:util包中的类-集合操作的工具类,其功能用来操作collection,由静态方法组成(折半查找,sort,shuffle(随机排列集合元素))

9.集合的嵌套

集合本身就是一个对象,集合存储的也是对象,所以集合里面也可以存集合,即集合的嵌套。

相关推荐