java常用集合基础知识_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java常用集合基础知识

java常用集合基础知识

 2014/4/16 13:05:09  Coraction  程序员俱乐部  我要评论(0)
  • 摘要:【纯出自个人笔记,如有错误,望改正,谢谢哈!学习~】一、Java集合1、集合类:容器类装对象的(不能存放基本数据类型,但是里面看到的其实是包装类型)java.util包ArrayList底层是一个对象数组--------------------------------------------------------------------------------------------List中是可以存放重复元素的。Set是不能有重复元素.Ⅰ:ArrayList:a.添加:add()
  • 标签:常用 Java 基础知识

【纯出自个人笔记,如有错误,望改正,谢谢哈!大笑学习~】

一、Java集合

1、集合类:容器类 装对象的(不能存放基本数据类型,但是里面看到的其实是包装类型)

java.util包

ArrayList底层是一个对象数组

--------------------------------------------------------------------------------------------

List中是可以存放重复元素的。Set是不能有重复元素.

? ? ? ? ? ? Ⅰ:ArrayList:

?

? a. 添加 :

add();里面可以存放字符串或者基本包装类型

ArrayList也可以存放布尔类型和对象

ArrayList list=new ArrayList();

list.add(1,"aa");这是指将aa字符串存放在arraylist集合索引的1位置(添加到指定位置);

list.size();是获取元素的个数,和数组的length,字符串的length()差不多。

list.add(list1);add里面还是可以放集合的

?

?

? b.修改 :

list.set(0,200);这是修改指定位置的元素,这里是指修改了arraylist集合0索引的值该为200;集合的索引和数组的下标差不多。

?

?

? c.获得 :

list.get(0);获得,这是获得list集合里的0索引处的值。它返回的类型是Object(Object obj=list.get(0);) 然后可以直接输出这s.o.p(obj);打印出来的就是list集合的元素

?

? d.遍历集合:

用for循环也可以,但是集合List集合一般都用迭代器遍历集合(Iterator,下面介绍)

?

? e.清空集合元素:

list.clear();清空掉集合中所有的元素,如果清空,输出就一对中括号“[]”表示集合里面没有元素了。o(∩_∩)o?

?

? f.移除/删除 集合中的元素:

remove();这是删除集合中的某个元素。比如list.remove(1);这就是删除掉集合中索引为1的元素(第二个),list.remove("aa");这是删除掉集合中的元素,就是如果集合中有aa的字符串,就删掉。 ?-----list.remove(new Integer(12));注意这种:要删除集合中的数值,就必须要这样(要指定包装类)否则删除的就是索引为12的元素,如果元素个数没有13个,那么就会出现 下标越界异常

---------------------------------------------------------------------------------------

?

? ? ? ?Ⅱ:LinkedList:ArrayList便于进行修改、获得值的操作 ?LinkedList便于进行增加和caozuo.html" target="_blank">删除操作

?

a.添加元素:

LinkedList添加元素也是add();基本用法和ArrayList差不多。但是LinkedList多了2个功能:addFirst()和addLast();这2个,比如list.addFirst("asd");这是在集合的第一个位置放置asd的字符串;list.addLast("aa");这是在集合的最后一个位置放置aa字符串;

?

b.遍历:

? ?和arraylist也是一样的。既可以用For循环遍历,也可以用迭代器遍历,推荐迭代器。 需要注意的是:在迭代器循环体内是不可以直接对集合进行添加删除操作的。

?

?

---------------------------------------------------------------------------------------------

?

Ⅲ:Stack类表示后进先出(LIFO)的对象堆栈(继承自Vector)。

?

a.添加元素

stack添加元素是用push()方法的,比如:s.push("aaa");这是指在statck中添加aaa元素压入栈中

?

?

b.移除元素:

s.pop();这是移除栈顶的元素 ?是栈顶

?

c.查看元素:

Syso(s.peek());查看栈顶的元素,表示只查看不剔除。

?

?

---------------------------------------------------------------------------------------------

?

Ⅳ:Vector ?底层是对象数组,线程安全的(同步

?

Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

?

---------------------------------------

以上是List 列表的知识点

?

===================================================================================

下面是Set 集的知识点回顾:

===================================================================================

?

? Set ? 不能有重复的元素、没有索引

?

Ⅰ、HashSet

a.添加元素:

? ?set.add("aa"); set.add(new Object());基本上也差不多

?

b.清除元素用的也是clear();

?

c.移除 ? ?remove()的用法

?

?

d,遍历HashSet: 注意,这里只能用迭代器(Iterator)遍历,因为Set集中是没有索引的,所以不能用for

例如: Iterator it = set.iterator();

while(it.hasNext()){

Object temp = it.next();

System.out.println(temp);

}

?

?

e,//由Object类中继承来的hashcode、equals方法

//Set中判断是否是重复的元素的过程:

//1、调用对象的hashcode方法,看返回的哈希码值是否相同,若不相同,则认为是不同的对象

//2、若相同,则再调用equals方法进行判断,若返回false,则认为是不同的对象,否则(返回的是true)则认为是同一个对象

?

例如 Student stu1 = new Student(1000,"张三");

Student stu2 = new Student(1001,"张三");

// System.out.println(stu1.hashCode());

// System.out.println(stu2.hashCode());

set.add(stu1);

set.add(stu2);

?

-----------------------------------------------------------------------------------------------

?

Set:不按照索引、不按照放入的次序存储元素-->无序的

//不能存放重复元素

?

? ? ? ? ?Ⅱ:TreeSet:具有排序功能的

?

a.添加元素也是add();//若放入的是数值,则按照数值大小升序排列;//若是字符串则按照字母的字 典顺序。需要注意的是:放入的元素得是同一类型的。

?

?

b//若要将自定义的对象放入TreeSet中,必须该对象所在的类是实现了Comparable接口

例如:Student stu1 = new Student(1003,"zhangsan");

Student stu2 = new Student(1000,"lisi");

Student stu3 = new Student(1001,"wangwu");

set.add(stu1);

set.add(stu2);

set.add(stu3);

Iterator<Student> it = set.iterator();

while(it.hasNext()){

Student stu = it.next();

System.out.println(stu.getId()+"\t"+stu.getName());

}

System.out.println(set);

?

public class Student implements Comparable<Student>{

private int id;

private String name;

?

>>>>>>(此处省略构造方法和set、get方法)<<<<<

?

@Override

public int hashCode() {

// System.out.println("调用了hashcode方法");

// return super.hashCode();

return 100;

}

?

@Override

public boolean equals(Object obj) {

// System.out.println("调用了equals方法");

// return super.equals(obj);

// return true;

Student stu = (Student)obj;

if(this.id==stu.id&&this.name.equals(stu.name)){

return true;

}else{

return false;

}

}

//排序规则

?

@Override

public int compareTo(Student stu) {

?

// return this.id-stu.id;//按照id的升序

// return stu.id-this.id;//按照id的降序

// return this.name.compareTo(stu.name);//按照name的升序

return stu.name.compareTo(this.name);

}

}

?

?

上面是Set集的回顾(都实现Collection接口)

===================================================================================

?

下面是Map映射知识点回顾 ?

===================================================================================

/Map:映射关系 ? 存放的是键值对key-value

Map,存放元素是put();方法

?

?

?

1.HashMap:不是线程安全的 ? key和value都可以为null(但key只能有一个null值,value可以多个)

例如 HashMap map = new HashMap();

map.put("", "");

map.put(null, null);//put()是放入元素

System.out.println(map);

?

?

?

?

2。Hashtable:1、线程安全的 ?古老集合 ?2、key和value都不能为null;获得value值:Object temp = map.get(23);//根据key获得value:-------->get(key);

例如: ? map.put("sa", "abc");

map.put(23, 34);

map.put(34, "cdf");

map.put(new Object(), "value");

?

注意map.put(null, "as");//key不能为null

map.put("aa", null);//value也不能为null

Hashtable遍历:

Set sets = map.keySet();//返回所有的key ?Map中的key是以Set形式存放的,获得所有KEY

Iterator it = sets.iterator();

while(it.hasNext()){

temp = it.next();//将key循环遍历出来

Object value = map.get(temp);//然后根据Key来遍历出value的值

System.out.println(value);

}

System.out.println(map);

?

?

?

?

?

3.TreeMap: ? ?key具有排序功能 ? ?key不能为null value可以为null

//若key是数值 ?按照数值大小的升序

/*map.put(1001, "value");

map.put(1000, "lue");

map.put(1002, "alue");*/

?

?

//若key是字符串,按照字母的字典顺序

/*map.put("bb", 23);

map.put("aa", 123);

map.put("cc", 3323);*/规则和TreeSet差不多,同样只能存放一种类型,只不过TreeMap是一种类型的key。

?

?

//若key是自定义的对象,该对象所在的类实现Comparable接口

// Student stu1 = new Student(1003,"zhangsan");

// Student stu2 = new Student(1000,"lisi");

// Student stu3 = new Student(1001,"wangwu");

// map.put(stu1, 123);

// map.put(stu2, 23);

// map.put(stu3, 323);

//

// Set sets = map.keySet();

// Iterator<Student> it = sets.iterator();

// while(it.hasNext()){

// Student stu = it.next();

// System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+map.get(stu));

// }

// System.out.println(map);

// map.put(null, "");//key不能为null

map.put("aa", null);

?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

?

【有不对的地方,多多批正微笑

发表评论
用户名: 匿名