#map与set
先看map
import java.util.Collection;
import java.util.HashMap;
import java.util.Set;
public class Map {
public static void main(String[] args){
HashMap<String,String>map=new HashMap<String,String>(); //这里用的的map里的HashMap,定义了一个新对象
map.put("book","3"); //put方法新增元素
System.out.println(map);
map.put("book1","2");
System.out.println(map);
System.out.println(map.containsKey("book2")); //使用containsKey判断键是是否有book2这个元素
System.out.println(map.containsValue("d123")); //这里是判断在值上是否有d123这个值
System.out.println(map.isEmpty()); //判断这个对象是否为空
System.out.println(map.size()); //输出这个对象的元素个数
Set<String> set=map.keySet(); //输出这个对象的键的集合
for(String s :set) //使用加强for循环遍历
{
System.out.println(s);
}
Collection<String> value=map.values(); //输出这个对象值的集合
for(String y:value)
{
System.out.println(y);
}
}
}
输出结果为:
{book=3}
{book1=2, book=3}
false
false
false
2
book1
book
2
3
##Map
- 使用了put,contains之类的方法来实现具体操作。
- Map集合的一个元素由两个数据组成,即键和值,在定义键和值时要注意定义的是基本数据类型的封装类,也就是说键和值都是对象,而不是一个数据类型。
- Map有HashMap,TreeMap等子类,HashMap会对元素进行查重,如果键重复那么后面添加的值会覆盖原来的值,而TreeMap则是对有自然排序的键进行排序。
- HashMap的底层是一个数组,我们存放实际是存放在数组中。
###再看Set
import java.util.*;
import java.util.HashSet;
import java.util.TreeSet;
class Student { //这里定义了一个类储存元素
private int age;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge(){
return age;
}
public int setAge(int age){
return age;
}
Student(){}
Student(int age,String name){
this.age=age;
this.name=name;
}
}
public class set {
public static void main(String[] ages){
HashSet<Student> set=new HashSet<Student>(); //将Student类作为元素new一个新对象
set.add(new Student(4,"王奕钦")); //为set对象中新增元素
set.add(new Student(3,"林清玄"));
set.add(new Student(5,"林黛玉"));
set.add(new Student(5,"王奕钦"));
for(Student student:set) //然后用加强for循环
System.out.println("姓名是: "+student.getName()+" 年龄是"+student.getAge());
HashSet<String> set0=new HashSet<String>(); //HashSet来new一个String的新对象
set0.add("1"); //新增元素
set0.add("2");
set0.add("4");
set0.add("1");
set0.contains("9"); //contains方法判断是否有相同元素
for(String s:set0)
System.out.println(s);
TreeSet<Integer> set1=new TreeSet<Integer>(); //用TreeSet创建一个新对象
set1.add(4);
set1.add(6);
set1.add(2);
set1.add(1);
for(Integer E:set1)
System.out.println(E);
}
}
结果是
姓名是: 林清玄 年龄是3
姓名是: 林黛玉 年龄是5
姓名是: 王奕钦 年龄是5
姓名是: 王奕钦 年龄是4
1
2
4
1
2
4
6
##set:
.只有每个元素只有一个数据,但是可以创建用创建类的方法来包含多个元素,但是再用HashSet的话,就不能进行查重了,因为String类中本来就包含equals和hashCode方法,需要在Student类中重写这两个方法才可以查重。
.set的话可以用add,clear等方法来进行基本的数据增删改。
.Set中也有HashSet和TreeSet等子类,用来具体实现,可以进行查重,排序等操作。
##最后
还涉及到了加强for循环,它的形式是
for(String s:set0) //String是封装类,s代表set0里面的的每一个元素,set0则表示具体的对象
加强for循环只适用于对象底层是迭代器的情况,不然无法使用。
不过加强for循环操作更为简单,也更为方便,能使用它的话会更便于我们操作。
t0) //String是封装类,s代表set0里面的的每一个元素,set0则表示具体的对象
加强for循环只适用于对象底层是迭代器的情况,不然无法使用。
不过加强for循环操作更为简单,也更为方便,能使用它的话会更便于我们操作。