一,认识类集
所谓类集就是一个动态对象数组,是对一些实现好的数据结构进行包装,最重要的是类集框架本身不受对象数组长度的限制。
类集框架被设计成拥有以下几个特性:
1,高性能
2,框架必须允许不同类型的类集以相同方式和高度互操作方式工作
3,类集框架必须是容易扩展和修改的
在JAVA中凡是以Sort开头的接口都属于排序的接口
下面介绍几种接口:
1,Collection接口
定义:public interface Collection <E>extends Iterable<E>
Collection接口是单值存放的最大父接口==(注意和和Collections区别,Collections是集合工具类,不属于集合体系,只是提供了关于集合操作的一些方法)==
在开发中很少直接使用,而是用其子接口,其子接口主要有:List,Set,Queue和SortedSet
二,List接口
接口定义:public interface List <E> extends Collection <E>
是Collection的子接口,里面可以保存重复元素
List接口常用的子接口:
ArrayList常用方法
List<String>allList=null;
allList=new ArrayList<String>();
allList.add("HELLOW");
allList.add(0,"WORD");
System.out.print(allList+"\n");
allList.remove(0);
System.out.print(allList+"\n");
allList.add("你好");
for(int i=0;i<allList.size();i++)//size()方法求得集合长度
{
System.out.print(allList.get(i)+",");
}
System.out.print("\n");
Object obj[]=allList.toArray();//将集合变为数组
for(int i=0;i<obj.length;i++)
{
System.out.print(obj[i]);
}
System.out.print("\n是否包含HELLOW字符串:"+allList.contains("HELLOW")+"\n");
System.out.print("HELLOW字符串的位置为:"+allList.indexOf("HELLOW"));
//运行结果:
[WORD, HELLOW]
[HELLOW]
HELLOW,你好,
HELLOW你好
是否包含HELLOW字符串:true
HELLOW字符串的位置为:0
ArrayList与Vector的区别:
ArrayList | Vector |
---|---|
采用异步处理方式,性能高 | 采用同步处理方式,性能较低 |
属于非线程安全的操作类 | 采用线程安全的操作类 |
为达到操作链表的目的,必须使用LinkedList类
LinkedList<String>link=new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C");
link.addFirst("X");
link.addLast("Y");
System.out.print("增加表头和表尾之后的链表:"+link);
System.out.print("\n用Element()方法找到表头"+link.element()+"\n找到表头之后的链表:"+link);
System.out.print("\n使用peek();方法找到的表头:"+link.peek()+"\n找到表头之后的链表:"+link);
System.out.print("\n使用poll方法找到的表头:"+link.poll()+"\n找到表头之后的链表:"+link);
//运行结果:
增加表头和表尾之后的链表:[X, A, B, C, Y]
用Element()方法找到表头X
找到表头之后的链表:[X, A, B, C, Y]
使用peek();方法找到的表头:X
找到表头之后的链表:[X, A, B, C, Y]
使用poll方法找到的表头:X
找到表头之后的链表:[A, B, C, Y]
三,Set接口
定义:
public interface Set<E> extends Collection<E>
Set接口并没有对Collection接口进行扩充,只是比Collection接口更加严格了,并且不能重复存储元素,也不能进行双向输出。
Set接口中有HashSet(散列存放)和TreeSet(有序存放)两个常用的子类
因为在TreeSet中元素是有序存放的,因此对于每个对象必须指定好其排序的顺序规则,且TreeSet中的每个对象所在的类都必须实现Comparable接口才能正常使用。
class Person implements Comparable<Person>
{
private String name;
private int age;
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString(){
return "姓名:"+this.name+" 年龄:"+this.age;
}
public int compareTo(Person per)
{
if(this.age>per.age) return 1;
else if(this.age<per.age) return -1;
else return 0;
}
}
public class one1 {
public static void main(String[] args) {
Set<Person> allset=new TreeSet<Person>();
allset.add(new Person("张三",31));
allset.add(new Person("李四",30));
allset.add(new Person("王五",32));
allset.add(new Person("王五",32));
System.out.print(allset);
}
}
//运行结果:
[姓名:李四 年龄:30, 姓名:张三 年龄:31, 姓名:王五 年龄:32]
四,集合的输出
1,迭代输出Itertor(从前向后单向输出)
所谓的迭代输出就是讲元素一个一个的进行判断,判断其是否有元素,如果有内容,则把内容取出。
List<T>all=new ArrayList<T>();
Itertor<T> iter=all.itertor();
//若要进行双向输出,则用ListIterator,但注意从后向前输出之前必须先从前向后输出
2,foreach输出
五,Map接口
定义:public interface Map<K,V>
在Map操作中,所有内容都是通过"key->value"的形式来保存数据的
其中key之和value之允许同时为null,但key值不允许重复,value值可以重复。
Map<String,String>map=new HashMap<String,String>();
map.put("小红", "喜欢苹果");
map.put("小明", "橙子");
map.put("小花", "香蕉");
String val=map.get("小红");
System.out.print(val);
System.out.print("\n是否存在小红:"+map.containsKey("小红"));
System.out.print("\n是否存在香蕉:"+map.containsValue("香蕉"));
Set<String>keys=map.keySet();//将Map转换为集合
System.out.print("\n"+keys);;
//运行结果
喜欢苹果
是否存在小红:true
是否存在香蕉:true
[小明, 小红, 小花]