集合的概念:
集合类存放于java.util包中。
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。
集合类型主要有3种:set(集)、list(列表)和map(映射)。
集合和数组非常相似,但是数组有固定的长度,而集合没有,集合的长度是无限大的,而且集合的大小是随着集合内容的增大而增大的。
在说集合之前需要补充一下泛型的概念:
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。
接下来我们用代码来简单讲一下泛型的作用:
package com.zking.entity;
public class Person<E,V> {
private E pid;//将pid定义为泛型
private String pname;
private V money[];
public V[] getMoney() {
return money;
}
public void setMoney(V[] money) {
this.money = money;
}
public E getPid() {
return pid;
}
public void setPid(E pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
}
package com.zking.test;
import com.zking.entity.Person;
public class TestFan {
public static void main(String[] args) {
Person<String, ?> person=new Person<String, Integer>();//在泛型中放入?通配符,new的时候就可以放入任意类型
}
}
1.测试map
package com.zking.test;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class TestMap {
//键值对
public static void main(String[] args) {
Map<String, Object> map=new HashMap<String, Object>();
map.put("A", "AAAA");
map.put("2", "2222");
map.put("3", "3333");
map.put("王", "大小王");
//遍历
//01.获取所有的键,再根据键获取值
// Set<String> strings=map.keySet();
// for (String string : strings) {
// System.out.println(string+":"+map.get(string));
// }
//02.获取所有的值
// Collection<Object> collection=map.values();
// for (Object object : collection) {
// System.out.println(object);
// }
//03.获取键和值(一个一个)
Set<Entry<String, Object>> entries=map.entrySet();
for (Entry<String, Object> entry : entries) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
2.测试set
package com.zking.test;
import java.util.HashSet;
import java.util.TreeSet;
public class TestSet {
public static void main(String[] args) {
//Set
//不能添加重复
//无序(放进去的顺序和取出来的顺序不一样)
HashSet<String> hashSet=new HashSet<String>();
hashSet.add("A");
hashSet.add("C");
hashSet.add("B");
hashSet.add(null);
//HashSet可以加空值
for (String string : hashSet) {
System.out.println(string);
}
//TreeSet不可以加空值
// TreeSet<String> treeSet=new TreeSet<String>();
// treeSet.add("A");
// treeSet.add("C");
// treeSet.add("B");
// treeSet.add(null);
// for (String string : treeSet) {
// System.out.println(string);
// }
}
}
3.测试List
package com.zking.test;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class TestList {
public static void main(String[] args) {
// List Set Map
//List
//可以重复
//有序
// List<String> list=new ArrayList<String>();
// list.add("A");
// list.add("B");
// list.add("C");
// list.add("A");
// System.out.println(list.size());
//
// for (String string : list) {
// System.out.println(string);
// }
LinkedList<String> list=new LinkedList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("A");
list.addFirst("头");//在集合的头部加入
list.addLast("尾");//在集合的尾部加入
list.removeFirst();
for (String string : list) {
System.out.println(string);
}
}
}
4.最后我们来总结一下
List
<1>ArrayList
数组结构,查询快,增删改慢
<2>LinkedList(特有方法)
链表结构,查询慢,增删改快
<3>Vector
增删改查慢
Set
<1>HashSet
<2>TreeSet
Map(重点)
<1>HashMap 可以加空值(无序)
<2>HashTable 不能加空值(无序)
<3>TreeMap 可以加空值(有序)
<4>迭代Map(重点)