手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

Java集合简述

[日期:2013-07-28] 来源:Linux社区  作者:Linux [字体: ]

Java中集合浅谈

1.这里我主要讲一下集合中List和Set两类

(1).List中又分为ArrayList、Vector、LinkList

(2).Set中又分为HashSet、TreeSet

集合:和数组一样,也是存储数据的容器

2.集合和数组的区别

(1).数组长度固定,集合长度可变

(2).数组能存基本数据类型,也能存引用数据类型。集合只能存引用数据类型

(3).数组只能存单一数据类型,集合能存任意引用类型

3.List存入顺序和取出顺序一致,存储的元素可以重复。(有序、可以重复)

(1)ArrayList:底层是Object的数组

ArrayList中的一些常用方法

a).增加:add()及重载

b).删除:remove(index)、remove(Object)、clear()

c).修改:set(index,Object)

d).查找:contains().依据equals()方法来判断是否包含该元素

e).输出:for()循环:size()、get(index)

特殊注意的地方:

1.set 返回的值是该位置上原先的元素

2.remove(Object):移除此列表中首次出现的指定元素(如果存在)

(2)Vector:和ArrayList用法基本一致。

Vector和ArrayList区分

(2).1推出时间

前者推出时间比后则早,但是现在比较常用ArrayList

(2).2线程安全

前者线程安全,后者非线程安全(不支持多线程)

(2).3后者效率高(因为大部分程序都是单线程)

(2).4输出方式:for()循环、迭代器Iterator

(说到迭代器那就讲讲迭代器吧

Iterator:迭代器,用于取出集合中的元素

迭代器使用时注意几点:

1.要定义在循环的外面

2.hashnext()方法不移动指针,next()方法移动指针

3.每一个迭代器只能迭代一次)

LinkList和ArrayList试用范围

LinkedList:底层是双向链表和ArrayList基本用法一样

ArrayList:经常用于查询,而对于LinkList经常用于频繁的增加删除修改

下面是一段关于ArrayList的代码用于说明List

package day09;
import java.util.ArrayList;
import java.util.Iterator;
public class TestArrayList {
public static void main(String[] args) {
//<String>为泛型<>内为集合内只能存入的数据类型,不用泛型也可以,但是使用泛型之后,存入集合的数据就有限制了
//      ArrayList<String> list = new ArrayList<String>();
ArrayList list = new ArrayList();
//      向集合对象中list中添加元素,可以是任意类型的元素因为没有定义泛型<>
list.add("one");
list.add(1);
list.add("three");
//      list.add(1, "two");//在下标1处添加元素,是add()方法的重载
//      System.out.println(list.remove(2));// 下标
//      System.out.println(list.remove("two"));// 删除元素
//      list.clear();//清除集合中所有元素
//      int i = (Integer) list.set(1,"two");// 返回结果是原先位置上的值
//      System.out.println(i);
//      输出list中的元素
System.out.print(list);
System.out.println();
boolean f = list.contains(new String("one"));// 依据equals方法
System.out.println(f);
//      for循环输出list中元素
for(int j=0;j<list.size();j++){
Object o = list.get(j);// Object o = new String("abc");
System.out.print(o+" ");
}
}
}

输出结果:
[one, 1, three]
true
one 1 three 
 
Set:无序、元素唯一
HashSet:底层是Hash表
保证元素唯一:通过hashcode和equals方法
对于HashSet来说,判断元素是否存在,或者删除元素,都是靠hashcode和equals方法
对于ArrayList来说,判断元素是否存在或者删除元素都是靠equals方法
TreeSet:底层是二叉树,能自动排序。
其能自动排序,依据就是compareTo方法,要求存入其中的元素具有可比较性
其中比较的方法有两种:
1.类implements Comparable接口,重写compareTo方法
2.更灵活的方式:让TreeSet本身具有可比较性,构造中传入一个Comparator的对象,重写compare方法
下面一段代码用于说明HashSet

package day09;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TestHashSet {
public static void main(String[] args) {
//      初始化HashSet带有泛型String类型,数据都为String类型
Set<String> set =  new HashSet<String>();
//      向set对象中添加元素
set.add("one");
set.add("two");
set.add("one");
set.add("three");
set.add("four");
set.add("five ");
set.add("five ");
//      输出的时候去重复但是无序
System.out.println(set);
//      前面说到的迭代器
Iterator<String> it = set.iterator();
while(it.hasNext()){
String s = it.next();
System.out.print(s+" ");
}
System.out.println();
//  foreach循环  格式:for(元素类型 变量名:集合对象/数组对象){}
for(String s : set){
//          底层就是Iterator迭代器
System.out.print(s+" ");
}
}
}

对于TreeSet和HashSet用法基本相同只需要把上面代码中的所有HashSet换成TreeSet即可。并且可以完成自动排序
输出结果:
[one, two, five , four, three]
one two five  four three
one two five  four three

推荐阅读:

Java中数组的比较的真相 http://www.linuxidc.com/Linux/2013-07/86970.htm

Java向前引用容易出错的地方 http://www.linuxidc.com/Linux/2013-06/86626.htm

Java中数组的clone http://www.linuxidc.com/Linux/2013-06/86606.htm

Java中的native关键字 http://www.linuxidc.com/Linux/2013-06/85573.htm

linux
相关资讯       Java集合 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款