集合
一、C#集合
以前讲过C#的集合,今天就简单的过一遍就好,重点不是在C#的集合而是Java的集合。
1、List和ArrayList
List和ArrayList的存储方式类似数组。
1、List :是泛型,限制数据类型;
语法:List<数据类型> list = new List<数据类型>();
2、ArrayList:是非泛型,不限制数据类型
语法:ArrayList array = new ArrayList();
2、Hashtable和Dictionary
Hashtable和Dictionary的存储方式是键对值得存储
1、Dictionary是泛型,泛型限制数据类型;
语法:Dictionary<key的数据类型,value的数据类型> dic = new Dictionary<key的数据类型,value的数据类型>();
2、Hashtable是非泛型,是不限制数据类型的;
语法:Hashtable hash = new Hashtable();
二、Java集合
1、相关类
1、Collection接口:
Collection接口存储一组不唯一(允许重复),无序的对象。
Collection是List和Set的父类,Collection是接口(interface);
2、Collections类:
Collections和Collection很像,但是它们不是一样的,Collections是Java提供的进行集合操作的工具类,Collections提供了对集合进行排序等多种算法实现。
3、Iterator接口:
这个接口是专门用来迭代(变量)集合的。
4、关系:
Collection是List和Set的父类,都是接口;
Map和Collection没有关系;
工具类:Collections;
迭代遍历:Iterator。
2、List
List在Java中是接口,List接口继承Collection接口,存储一组不唯一(允许重复)有序(以元素插入的次序来排列)的对象;
List接口的实现类:ArrayList、LinkedList和vector;
1、ArrayList
存储方式:类似数组;
1、语法:
//语法一
//ArrayList和List都属于java.util的包
//这是非泛型的集合。
ArrayList list = new ArrayList();
//语法二
//ArrayList和List都属于java.util的包
//这是非泛型的集合。
List list = new ArrayList();
//语法三
//ArrayList和List都属于java.util的包
//这是泛型的集合。
ArrayList<String> list = new ArrayList<String>();
//这里String就是数据类型了,这里用的是数据类型必须是引用数据类型,如果要用基本数据类型可以使用基本数据类型的包装类
基本数据类型 | 基本数据类型的包装类 |
---|---|
int | Integer |
char | Character |
float | Float |
long | Long |
基本数据类型的包装类只有int和char是变化比较大的,其他的基本数据类型都只要大写首字母就可以了。
2、方法:
add()添加方法;
get(下标)取数据,下标从0开始到长度-1结束;
size()得到长度;
删除值:区别于C#:删除指定值:Remove,删除指定下标:RemoveAt; Java:删除值和删除下标都是用Remove方法,通过参数类型区分;如果是int就是下标,如果是其他类型就是值。
3、遍历:for,foreach,Iterator
//for
for(int i = 0;list.size();i++){
System.out.println(list.get(i));
}
//foreach
for(int nun : list){
System.out.println(num);
}
//Iterator遍历步骤:1、先将List/Set/Map转换成为Iterator对象---iterator()方法;2、通过hasNext()方法判断是否还有下一个值;3、通过Iterator对象得next()方法取值
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
2、LinkedList
1、LinkedList得存储方式:是链式存储(前一个会有一个指向下一个值的存储单位);
2、好处:适用于集合数据频繁的修改;不适用频繁的读取数据;
3、语法:
//语法一:非泛型
LinkedList list = new LinedList();
//语法二:泛型,这里的数据类型要是引用数据类型
LinkedList<String> link = new LinkedList<String>();
4、方法:
add()添加方法,add(int,Object)添加值到指定位置
addFried();添加到第一位
addLast();添加到最后一个;
addFried()和addLast()是LinkedList独有的方法。
clear()清空
getFried() 得到第一个;getLast()得到最后一个
iterator()转换成Iterator对象
remove()删除;removeFired()删除第一个;removeLast()删除最后一个
toArray()转换成数组
5、遍历 for,foreach,Iterator
//for
for(int i = 0;i < link.size();i++){
System.out.println(link.get(i));
}
//foreach
for(int num : link){
System.out.println(num);
}
//Iterator
Iterator it = link.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
3、Vector
Vector 和ArrayList是一样的操作,方法等;
Vector和ArrayList的区别:Vector是线程安全,ArrayList是线程不安全。
3、Set
Set在Java中也是接口,Set接口继承Collection接口,存储一组唯一(不允许重复)无序的对象;
1、操作:类似List
2、实现类:HashSet、TreeSet
1、HashSet:类似数组;
2、语法:
Set<Integer> hashSet = new Set<Integer>();
3、方法:
clear(); 清空
isEmpty(); 判断是否为空,为空就是true
iterator(); 转换成Iterator对象
size(); 得到长度
toArray();转换成数组
4、add()添加方法的特点:
同一个值只能添加一次;
//例
hashSet.add(10);
hashSet.add(10);
//一个值只能添加一次
5、遍历
//foreach
for(int num : hashSet){
System.out.println(num);
}
//Iterator
Iterator it = hashSet.inerator();
while(it.hasNext()){
System.out.println(it.next());
}
这里不能用for循环,因为这HashSet不能用下标来取值,因为它是无序的。
2、TreeSet
1、TreeSet:是以树形结构图存储的,继承了SocrtedSet接口
2、语法:
TreeSet<Integer> tree = new TreeSet<Integer>();
3、方法:
add() 添加方法,iterator()转换成Iterator对象,……
4、遍历:
//Iterator
Iterator it = tree.iterator();
while(it.hasNext()){
it.next();
}
TreeSet在变量的时候会自动排序,默认是从小到大;
注:父类指向子类的时候,不能调用子类特有的方法;
4、Map
Map在Java中也是接口,Map的存储方式:存储一组成对的键 - 值对象,提供键(key)到值(value)的映射,Map中的key不要求有序,不允许重复,value同样不要求有序,但允许重复。
1、存储方式:key:value
2、实现类:HashMap、Hashtable、TreeMap、ConunrrentMap
1、HashMap
1、语法:不能有重复的key,否则会覆盖,key和value可以是null
//1
Map map = new HashMap();
//2
Map(String,String) map1 = new HashMap(String,String);
//3
HashMap map3 = new HashMap();
2、方法:
put(key,value); 添加
get(“key”); 取值
size(); 得到长度
3、遍历:
//所有的key
Set<String> setkey = map.KeySet();
//所有的value
Collection<String> coll = map.Values();
//遍历key,Iterator
Iterator<String> it = tree.iterator();
while(it.hasNext()){
String key = it.next();
System.out.println(key+"\t"+map.get(key));
}
//foreach
for(String key:setkey){
System.out.println(key);
}
//遍历value,Iterator
Iterator<String> it = tree.iterator();
while(it.hasNext()){
String value = it.next();
System.out.println(value+"\t"+map.get(key));
}
//foreach
for(String value:Values){
System.out.println(key);
}
2、Hashtable
1、语法:可以用重复的key,key和value都不能为null;
Hashtable<String,Integer> hash = new Hashtable<String,Integer>();
Hashtable方法和遍历和HashMap差不多。
2、线程安全:Hashtable,Vector,ConcurrentMap(特点是:速度慢,安全)
线程不安全:HashMap,ArrayList(特点是:速度快,不安全)
3、TreeMap
1、TreeMap是树形结构图存储,有二叉树算法在里面。
2、语法:key不能为null,可以添加重复的key,然后回覆盖掉以前key对应的value。
TreeMap<String,String> tree = new TreeMap<String,String>();
3、方法和遍历:
添加方法:put(“key”,“value”);
//遍历
for(String key:tree.KeySet()){
System.out.println(key+"\t"+tree.get(key))
}
TreeMap会对key进行排序
4、ConunrrentMap
1、语法:
ConcurrentMap<String,String> con = new ConcurrentHashMap<String,String>();
2、添加方法:put(“key”,“value”);
3、实现安全的方式要比Hashtable更优,它是针对线程安全部分代码做了优化。