java_集合
来源:互联网 发布:js显示当前系统时间 编辑:程序博客网 时间:2024/05/17 00:07
简要说明
java中的集合所在包为java.util.*。
集合相当于一个容器,常见的数组,它是存储相同数据类型的,长度固定,而集合存储的是对象的引用,长度是可变的。
常见的集合类有:list集合,set集合,map集合。可以看下图的关系图
list集合和set集合实现了collection接口。而map集合时单独的。
collection接口
collection表示一组对象(或者成为元素),一些collection中可以有重复元素,另一些是不能的,一些事有序的,一些事无序的。
jdk中规定,不能直接实现此接口,可以使用它的子接口去实现,比如,list和set子接口。下面是一段简单的实例,其中的arraylist实现list接口,后面会讲到,而iterator是专门对collection进行迭代的迭带器。
(copy code)
public static void main (string [] args)
{
collection listcollection = new arraylist();
listcollection.add("1");
listcollection.add("2");
listcollection.add("3");
iterator it = listcollection.iterator();// 创建迭代器
while (it.hasnext())
{
system.out.println((string)it.next());
}
}
list集合
list集合包含list接口以及list接口的所有实现类,list集合中的元素允许有重复,各元素的顺序就是按对象插入的顺序。像数组一样,可以使用索引号访问元素。
list接口
list接口实现了collection接口,拥有collection的所有方法。此外还添加了2个很重要的方法:
get(int index) :获取指定索引处的元素
set(int index,object obj) :将集合中指定索引位置的元素更改为指定的对象
list接口的实现类
常用的有arraylist和linkedlist
arraylist类:实现了可变的数组,允许所有类型元素,包括null值。根据索引位置对集合中的元素进行快速的随机访问,缺点是根据索引位置进行插入和删除的效率慢。
linkedlist类 :使用链表结构保存对象,此结构使它的优点就是arraylist的缺点,它的缺点就是arraylist的优点,两者互补的,所以根据实际情况,选择合适的来实现list集合。
下面是一个简单的实例
list接口实现类(copy code)
public static void main (string [] args)
{
// arraylist
list list = new arraylist();//用arraylist类实现list接口
list.add(1);//添加元素
list.add(2);
list.add(3);
system.out.println("list集合中的元素为:");
for (int i = 0 ; i size(); i++)
{
system.out.println(list.get(i));//通过list集合新增的方法get(int index)获取指定索引处的元素
}
list.set(2 , 4);//通过list集合新增的方法set(int index,object obj) 更改索引处的元素为指定的object
system.out.println("更改后的list集合中的元素为:");
for (int i = 0 ; i size() ; i++)
{
system.out.println(list.get(i));// 通过list集合新增的方法get(int index)获取指定索引处的元素
}
// linkedlist
list list2 = new linkedlist();
list2.add(4);
list2.add(5);
list2.add(6);
system.out.println("list集合中的元素为:");
for (int i = 0 ; i size() ; i++)
{
system.out.println(list2.get(i));
}
list2.set(2 , 7);// 通过list集合新增的方法set(int index,object obj) 更改索引处的元素为指定的object
system.out.println("更改后的list集合中的元素为:");
for (int i = 0 ; i size() ; i++)
{
system.out.println(list2.get(i));// 通过list集合新增的方法get(int index)获取指定索引处的元素
}
}
list集合的索引号和数组一样,从0开始的。
set集合
set集合中的对象是不按特定方式排序的。set集合不能有重复对象。
set集合有set接口和set接口的实现类组成。
和list集合同样实现collection接口。
set接口的实现类有hashset类和treeset类
hashset类,实现set接口,由哈希表(实际为一个hashmap实例)支持。它不保证set的迭代顺序,特别是它不保证该顺序恒久不变,它允许使用null元素,当然不能有重复对象。
treeset类,不仅实现了set接口,还实现了java.lang.sortedset接口,所以在遍历集合时会按照自然顺序递增排序,当然可以根据指定比较器自定义排序。
treeset中新增的某个方法就是comparator(),返回对此set元素进行排序的比较器。如果使用默认的自然排序,则返回null。
下面是实例
treeset类实现set集合(copy code)
//comparable此接口强行对实现它的每个类的对象进行 整体排序。这种排序被称为类的自然排序,类的 compareto 方法被称为它的自然比较方法。
public class treesetdemo implements comparableobject>
{
string namestring;
long id;
public treesetdemo (string name , long id)
{
super();
this.id = id;
this.namestring = name;
}
public string getnamestring ()
{
return this.namestring;
}
public void setnamestring (string namestring)
{
this.namestring = namestring;
}
public long getid ()
{
return this.id;
}
public void setid (long id)
{
this.id = id;
}
/**
* @param args
*/
public static void main (string [] args)
{
treesetdemo treesetdemo = new treesetdemo("张三" , 12);
treesetdemo treesetdemo1 = new treesetdemo("张三55" , 13);
treesetdemo treesetdemo2 = new treesetdemo("张三44" , 19099);
treesetdemo treesetdemo3 = new treesetdemo("张三33" , 90);
treesetobject> treeset = new treesetobject>();
treeset.add(treesetdemo);
treeset.add(treesetdemo1);
treeset.add(treesetdemo2);
treeset.add(treesetdemo3);
// treeset.comparator();
iteratorobject> iterator = treeset.iterator(); // 创建set集合的迭代器
system.out.println("set集合中的所有元素是");
while (iterator.hasnext())
{
treesetdemo tr = (treesetdemo) iterator.next();
system.out.println(tr.namestring + "" + tr.id);
}
// headset截取排在treesetdemo2前面的对象
iterator = treeset.headset(treesetdemo2).iterator();
system.out.println("截取前面部分的集合");
while (iterator.hasnext())
{
treesetdemo tree = (treesetdemo) iterator.next();
system.out.println(tree.id + "" + tree.namestring);
}
// subset 截取排在treesetdemo2 和 treesetdemo3 之间的对象
iterator = treeset.subset(treesetdemo1 , treesetdemo3).iterator();
system.out.println("截取前面部分的集合");
while (iterator.hasnext())
{
treesetdemo tree = (treesetdemo) iterator.next();
system.out.println(tree.id + "" + tree.namestring);
}
}
@override
public int compareto (object o)
{
treesetdemo treesetdemo = (treesetdemo) o;
int result = id > treesetdemo.id1 : (id == treesetdemo.id0 : -1);
return result;
}
}
存入treeset类实现set集合的类必需实现comparable接口。重写的compareto方法,指定了对象与指定对象的排序顺序。
map集合
map没有实现collection接口,它提供的是一种键(key)值(value)对的映射,一个key对应一个value,不能有相同的key。
key还决定了存储对象在映射中的存储位置,注意的是不是根据key本身去实现,而是根据散列技术进行处理的,产生一个散列码的整数值,相当于一个偏移量,对应分配给映射的内存区域的起始位置,以此来决定存储在映射中的存储位置。
map集合有map接口和实现它的类组成。
map接口中有几个常用的方法
put(key k,value v):向集合中添加指定键值对
get(object key):根据指定的key获取对应的value
keyset();返回集合中所有key对象形成的set集合
values();返回集合中所有value对象形成的collection对象
下面是一个实例
hashmap类实现map集合(copy code)
public static void main (string [] args)
{
mapstring, string> map = new hashmapstring, string>();
map.put("李" , "19");
map.put("张" , "26");
map.put("黄" , "23");
setstring> set = map.keyset(); // 返回map中所有键对象形成的set集合
iteratorstring> iterator = set.iterator();// 创建迭代器
system.out.println("key 中的集合元素:");
while (iterator.hasnext())
{
system.out.println(iterator.next());
}
collectionstring> coll = map.values(); // 返回map中所有值对象形成的collection集合
iterator = coll.iterator();
system.out.println("values中的元素:");
while (iterator.hasnext())
{
system.out.println(iterator.next());
}
}
map集合允许value为null,而且么有个数限制,如:map.put("a" , null);
map接口的实现类
可分为hashmap类和treemap类。hashmap对添加和删除映射关系的效率比treemap高(通过哈希码对其内部进行映射关系查找),但treemap中的对象是存在一定顺序的。、
hashmap类:基于哈希表的map接口实现,允许使用null键和null值,但必需唯一。
treemap类:不仅实现了map接口,还实现了java.util.sortedmap接口,因此集合中的元素是存在一定顺序的。在添加和删除映射关系上的性能没有hashmap好。由于它是根据键对象按照一定顺序排列的,所以不允许key为null
下面是一个实例
map实例(copy code)
public class mapdemo2
{
public mapdemo2 (string e_id , string e_name)
{
this.e_idstring = e_id;
this.e_namestring = e_name;
}
string e_idstring;
string e_namestring;
public string gete_idstring ()
{
return this.e_idstring;
}
public void sete_idstring (string eidstring)
{
this.e_idstring = eidstring;
}
public string gete_namestring ()
{
return this.e_namestring;
}
public void sete_namestring (string enamestring)
{
this.e_namestring = enamestring;
}
public static void main (string [] args)
{
mapstring, string> map = new hashmapstring, string>();// hashmap实现map接口
mapdemo2 demo = new mapdemo2("001" , "张三");
mapdemo2 demo1 = new mapdemo2("004" , "张si");
mapdemo2 demo2 = new mapdemo2("003" , "张wu");
// 添加键值对
map.put(demo.gete_idstring() , demo.gete_namestring());
map.put(demo1.gete_idstring() , demo1.gete_namestring());
map.put(demo2.gete_idstring() , demo2.gete_namestring());
// 获取map集合种哦所有key的set集合
setstring> set = map.keyset();
iteratorstring> iterator = set.iterator();
system.out.println("hashmap类实现的map集合,无序");
while (iterator.hasnext())
{
// 获取key
string str = (string) iterator.next();
// 根据key获取对应的value
string namestring = (string) map.get(str);
system.out.println(str + " " + namestring);
}
// treemap
treemapstring, string> treemap = new treemapstring, string>();
// .将指定映射中的所有映射关系复制到treemap中。
treemap.putall(map);
iteratorstring> iterator2 = treemap.keyset().iterator();
system.out.println("treemap类实现的map集合,键对象升序");
while (iterator2.hasnext())
{
string str = (string) iterator2.next();// 获取key
string namestring = (string) map.get(str); // 根据key获取对应的value
system.out.println(str + " " + namestring);
}
}
}
转载请注明本文链接。版权所有?2010李佳龙专栏,保留所有权利。
绿色通道:好文要顶关注我收藏该文与我联系
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
- java_集合
- java_集合
- java_集合
- java_集合
- java_集合
- Java_集合
- java_集合
- java_集合类
- Java_集合_HashCode
- java_集合框架
- JAVA_集合总结Map
- JAVA_集合工具类
- java_集合类详解
- java_基础_集合
- Java_集合类汇总
- java_集合01
- java_单列集合复习
- Java_集合_Collection
- Zhuang miao
- Java 内存管理总结
- 有简易通用权限管理后台的快速C# ASP.NET开发的例子应用程序卖给了曾长期开发JAVA银行程序的大哥
- 强大的Java GUI设计器WindowBuilder Pro
- RE: 悟透JavaScript
- java_集合
- superstar
- JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用。
- 关于 Java 中 finally 语句块的深度辨析
- Eclipse启动时报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in ord
- java中finalizer终结方法学习心得
- java 反射
- java环境快速配置
- JavaScript继承详解(三)