猫哥直接跳过了类、封装、继承,来讲容器。此处稍微提下需要掌握的,对于类,掌握下面这个最基本的就够了。
public class TypeName{//类名称
//成员变量定义
int i;
string x;
//成员函数定义
public int add(){}
}
对于封装、继承甚至后面的接口、抽象类、内部类等Java语法,脱离了应用场景去学习是很飘渺的,所以在以后用到的时候再说明。在目前这个阶段,会定义类,然后实现类的对象,调用类的方法,可以了。
继续本篇的正题:常用容器。猫哥也不过多解释纷繁复杂的继承关系,简单把常用容器分类三类:List、Set、Map。
List是有序的元素集,常用的有ArrayList和LinkedList,其中ArrayList有点像数组,查询速度快,插入、删除速度慢。而LinkedList像链表,查询速度稍慢,插入、删除速度较快。List使用get(i)获取第i个元素(i就是顺序),使用add()添加元素。
- Set是不包含重复元素的元素集。常用的有HashSet和TreeSet,HashSet性能好,比较常用。那还要TreeSet干哈呢,人家TreeSet能排序哦。
- Map是key-value映射的元素集,也就是说Map中的每个元素包含两个部分,key表示元素的索引键,而value是该键对应的值。所以添加元素是put(key,value),获取元素是get(key),那key不存在get(key)就返回null了。
常用的类是HashMap。
说白了,List、Set、Map是三种接口,而ArrayList、LinkedList、HashSet、TreeSet、HashMap等是接口的具体实现类。
其实List和Set还是很像的,都是单个元素的元素集,所以他俩其实都有一个最基本的接口即Collection,这个Collection接口的标准非常简单,就是Object的集合,可以包含很多个Object。OK,写一段详细的代码演示下:
import java.util.*;//容器类所在的包得导入进来
/**
* 容器使用演示
* @作者 猫哥
* @编码时间 2016.12.27
*/
public class ContainerDemo {//定义了一个类,用来演示容器的使用
public static void main(String[] args) {//这个方法是程序的入口
System.out.println("开始比较ArrayList<String>和ArrayList");
ArrayList<String> stringList=new ArrayList<String>();//这个ArrayList只能添加String类型元素
ArrayList objectList=new ArrayList();//这是一个无类型说明的ArrayList,可以添加任意Object
stringList.add("hello 101");//只能添加String类型的元素
stringList.add("hello 102");
System.out.println("遍历输出 stringList");
for(int i=0;i<stringList.size();i++){
System.out.println(stringList.get(i));
}
System.out.println("foreach输出 stringList 因为里面的元素都是统一的");
for(String str:stringList){
System.out.println(str);
}
objectList.add(103);//添加不同种类的元素,其实添加的是引用的值
objectList.add("hello 103");
System.out.println("遍历输出 objectList");
for(int i=0;i<objectList.size();i++){
System.out.println(objectList.get(i));
}
System.out.println("foreach输出 objectList ");
for(Object obj:objectList){
System.out.println(obj);
}
System.out.println("开始演示HashSet和TreeSet");
HashSet hashSet=new HashSet();
TreeSet treeSet=new TreeSet();
hashSet.add("a");
hashSet.add("b");
hashSet.add("d");
hashSet.add("c");
hashSet.add("a");
Iterator irhashSet=hashSet.iterator();//Iterator用于遍历
System.out.println("输出可见a排除重复了,注意HashSet不保存存放时候的顺序");
while(irhashSet.hasNext()) {
System.out.println(irhashSet.next());
}
treeSet.add("a");
treeSet.add("b");
treeSet.add("d");
treeSet.add("c");
treeSet.add("a");
Iterator irTreeSet=treeSet.iterator();//Iterator用于遍历
System.out.println("输出可见a排除重复了,TreeSet是有确定顺序的,一般是从小到达,从前到后");
while(irTreeSet.hasNext()) {
System.out.println(irTreeSet.next());
}
HashMap hashMap=new HashMap();//key不可重复,value可以
hashMap.put("学号001", "姓名张三");
hashMap.put("学号002", "姓名李四");
hashMap.put("学号003", "姓名张三");
Iterator irHashMap = hashMap.keySet().iterator();//keySet()把hashMap中的key值整理为set
while (irHashMap.hasNext()){
Object key = irHashMap.next();//获取key
Object val = hashMap.get(key);//获取对应value
System.out.print(val);
}
}
}