------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
集合框架
集合的由来:
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多
个对象的操作,就对对象进行存储,集合就是存储对象最常用的一
种方式。
数组和集合的区别:
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。
数组中可以存储基本数据类型,集合只能存储对象。
集合中存储的都是对象的引用(地址)
List接口中常用类:
ArrayList:数组结构 线程不安全,查询速度快。增删稍慢。
LinkedList:链表结构,增删速度快。查询稍慢
Vector: 数组结构 线程安全,但速度慢,已被ArrayList替代。
List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index):
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();
取出List集合中元素的方式:
高级for循环
public class CollectionIterator {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();//新建集合对象
al.add("haha");
al.add("haha2");//添加元素
al.add("haha3");
Iterator<String> it = al.iterator();//获取迭代器
while(it.hasNext())//判断是否有元素
{
System.out.println(it.next());//取出元素,但不能并发访问。
}
}
}
LinkedList: 特有方法
class LinkedListDemo
{
public static void main(String[] args)
{
LinkedList link = new LinkedList();
link.addLast("java01");
link.addLast("java02");
link.addLast("java03");
link.addLast("java04");
while(!link.isEmpty())//判断是否为空
{
sop(link.removeLast());//获取、删除元素。
}
}
Vector:特有取出方式-->枚举
class VectorDemo
{
public static void main(String[] args)
{
Vector v = new Vector();
v.add("java01");
v.add("java02");
v.add("java03");
v.add("java04");
Enumeration en = v.elements();//获取枚举
while(en.hasMoreElements())//判断下一个元素是否存在
{
System.out.println(en.nextElement());//取出下一个元素
}
}
}
Set接口:
HashSet:哈希表数据结构
线程不安全,存取速度快。
通过hashCode 方法和equals方法来保证元素的唯一性。如果元素的HashCode值相
同,才会判断equals是否为true。如果元素的hashcode值不同,不会调用equals。
自定义类要重写hashCode 方法和equals方法
<span style="white-space:pre"> </span>public int hashCode()
{
return name.hashCode()+age*37;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
TreeSet: 二叉树数据结构
线程不安全,可以对Set集合中的元素进行排序。
通过compareTo或者compare方法中的来保证元素的唯一 性。元素是以二叉树的形式存放的。
TreeSet中存储的对象要具有比较性需要实现Comparable -->覆写 compareTo
或者自定义比较器:实现Comparator -->覆写 compare
当两者排序都存在时,以比较器为主。
class Person implements Comparable<Person>//实现Comparable接口
{
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public int compareTo(Person p)//重写方法
{
int num = this.name.compareTo(p.name);
if (num==0)
return new Integer(this.age).compareTo(new Integer(p.age));
return num;
}
Comparator --> 覆写 compare
自定义比较器。
class MyCom implements Comparator<Person>//实现Comparator
{
public int compare(Person p1,Person p2)//重写方法。
{
int num = p1.getName().compareTo(p2.getName());//判断主要条件。
if(num==0)//主要条件相同时,判断次要条件。
return new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
return num;
}
}
泛型:<>
特点:
提高了程序的安全性
将运行期遇到的问题转移到了编译期
省去了类型强转的麻烦
泛型类的出现优化了程序设计
特殊:静态方法不能引用类上的泛型。
<?>类型不确定时用通配符表示。
Map:
Map与Collection在集合框架中属并列存在
Map存储的是键值对,具有映射关系。
Map存储元素使用put方法,Collection使用add方法。
Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素。
Map集合中键要保证唯一性
Map集合常用类:
HashMap:底层是哈希表数据结构,线程不安全,速度快,允许存放null键,null值。
Hashtable:底层是哈希表数据结构 ,线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
TreeMap:底层是二叉树数据结构,对键进行排序,排序原理与TreeSet相同。
常用方法:
1,添加。
put(K key, V value) 如果出现添加时,出现相同的键。那么后添加的值会覆盖原有键对应值。
putAll(Map<? extends K,? extends V> m)
2,删除。
clear()
remove(Object key)
3,判断。
containsValue(Object value)
containsKey(Object key)
isEmpty()
4,获取。
get(Object key)
size()
values()
entrySet()
keySet()
重点方法演示:
entrySet()
keySet()
public class MapDemo {
public static void main(String[] args) {
TreeMap<String,String> tm = new TreeMap<String,String>();//建立集合
tm.put("java01", "haha1");
tm.put("java02", "haha2");
tm.put("java03", "haha3");
tm.put("java01", "haha1");
tm.put("java02", "haha2");
tm.put("java03", "haha3");
Set<String> keyset = tm.keySet();//获取键Set集合
Iterator<String> it =keyset.iterator();//迭代
while(it.hasNext())
{
String key=it.next();
String value= tm.get(key);
System.out.println(key+":....:"+value);
}
Set<Map.Entry<String,String>> entryset = tm.entrySet();//Map.Entry<String,String>集合中的映射关系 就像夫妻的结婚证一样。
for(Map.Entry<String,String> me :entryset)//高级for循环。
{
String key = me.getKey();
String value = me.getValue();
System.out.println(key+" entry "+value);
}
<span style="color:#ff0000;">
</span>
集合框架工具类:
Collections: sort reverseOrder()
toArray 集合变数组
为了限定对元素的操作。不需要进行增删了。
Arrays : asList( ) 数组变成list集合
可以使用集合的思想和方法来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法。
因为数组的长度是固定。
sort 折半查找
以上内容为本人笔记,仅供参考。