java集合框架02

来源:互联网 发布:麻瓜编程第一本python 编辑:程序博客网 时间:2024/06/05 00:22

Java集合框架图



今天我给大家讲一下Collection接口有2个子接口分别是listset

先给大家普及一些知识点

1.什么是JDK?JDK 是Java开发工具包 (Java Development Kit ) 的缩写。它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境。 JDK: 1.3-->1.4-->1.5-->1.6-->1.7-->1.8 1.5是jdk的分水岭(1.5之后提供了自动装箱和拆箱)

2.集合中只能保持引用类型(一直如此)那什么是引用类型?什么又是值类型?

最简答来说除了8中基本类型以外剩下的都是引用类型,它保持的是地址,而值类型是八大基本的数据类型,保持的是值

3.装箱和拆箱:

Integer n=new Interger(10);//值类型-->引用类型=装箱

int i=n.intvalue()://引用类型->值类型=拆箱


4.泛型:以类型为参数的类就叫做泛型。默认值为Object(列如:List<Integer> list=new ArrayList<Integer>();)

作用:简化开发,保证代码的健壮性

举一个简单的例子:如果一个人很健壮,那么他在遇到一些小毛病的时候,比如感冒,能够很快恢复,而不至于遇到感冒就倒掉了

对比过来,就是如果一个程序很健壮,那么他在遇到感冒的时候(比如,想要打开的文件不存在),也能够很快恢复(处理异常情况,输出错误信息等),然后继续运行下去,而不至于一遇到感冒就GG了。

简单的说,健壮性的代码就是遇到问题不容易崩溃的代码。



1.list特点:有序,可以重复

list其下有三个实现类分别是:ArrayList,LinkedList,Vector(都继承了list的所有方法和特点

List是接口,List特性就是有序,会确保以一定的顺序保存元素.

ArrayList是它的实现类,是一个用数组实现的List

1.1ArrayList 是一个可变数组, 它有数组的所有优缺点, 如高效的随机访问, 低效的插入和删除. 它允许重复值, 允许null, 有序(所谓的有序指的是读取元素的顺序和插入的顺序一致 ),数组默认值10,如果你没有定义,默认为10,即当 元素个数 超过 容量长度 时,进行扩容,扩容增量:原容量的 0.5倍+1(注意:负载因子是0.5 )你可以根据自己的需求自己定义大小(这样可以优化你的代码) List<Integer> list=new ArrayList<Integer>(100);

public class demo2 {
public static void main(String[] args) {
List<Integer> list=new ArrayList<Integer>();

list.add(new Integer(3));
list.add(new Integer(5));


int sum=0;
for (Integer i : list) {
sum+=i.intValue();
}
System.out.println(sum);


}
}


1.2 LinkedList

采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦 要丛第一个索引开始.使用LinkedList实现堆栈(队列)
   
堆栈:是一种先进后出的数据结构(容器),弹夹

/**
 * 堆栈
 * @author king
 *
 */
public class Demo1 {

private LinkedList linkedList=new LinkedList();

//压栈
public void  push(Object value){//压
linkedList.addFirst(value);
}

//出栈
public Object pop(){//弹
Object value=linkedList.getFirst();
linkedList.removeFirst();
return value;
}



//容器大小
public int size(){
return linkedList.size();
}

public static void main(String[] args) {
Demo1 demo1=new Demo1();
demo1.push("12");
demo1.push("13");
demo1.push("14");
demo1.push("15");

while(demo1.size()!=0){
System.out.println(demo1.pop());
}

}
}

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

队列:先进先出(当多个任务分配给打印机时,为了防止冲突,创建一个队列,把任务入队,按先入先出的原则处理任务。
当多个用户要访问远程服务端的文件时,也用到队列,满足先来先服务的原则。)

/**
 * 方法
 * @author king
 *
 */
public class DuiLie {

private LinkedList<Object> link;
   DuiLie(){
       link = new LinkedList();
   }
    
   public void myAdd(Object obj){
       link.addFirst(obj);
   }
   public Object myGet(){
       return link.removeLast();
   }
    
   public boolean isNull(){
       return link.isEmpty();
   }
}

在写一个类,然后实例化对象,调用方法

/**
 * 队列
 * @author king
 *
 */
public class LinkListTest {
public static void main(String[] args)
   {
       DuiLie dl = new DuiLie();
       dl.myAdd("Java01");
       dl.myAdd("Java02");
       dl.myAdd("Java03");
       dl.myAdd("Java04");
        
       // System.out.println(dl.myGet());
        
       System.out.println("============");
        
       while (!dl.isNull())
       {
           System.out.println(dl.myGet());
       }
   }
}

 

1.3Vector

Vector 除了提供了同步外, 它和 ArrayList 没有任何区别, 因为它是线程安全的, 所以效率比较差, Java 推荐我们尽量使用 ArrayList.


2.Set(equals()比较的是对象地址
特点:无序,不可以重复

/**
 * Set的特点
 * @author king
 *
 */
public class Demo1 {
// 无序、不能重复
/*public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("zs");
set.add("ls");
set.add("ww");
set.add("ls");
System.out.println(set.size());


for (String s : set) {
System.out.println(s);
}
}*/


/*public static void main(String[] args) {
Set<Stu> set = new HashSet<Stu>();
set.add(new Stu(1, "zs", 20));
set.add(new Stu(2, "ls", 21));
set.add(new Stu(3, "ww", 22));
set.add(new Stu(1, "zzz", 33));
System.out.println(set.size());


for (Stu s : set) {
System.out.println(s);
}
}*/


public static void main(String[] args) {
Set<Stu> set = new TreeSet<Stu>();
set.add(new Stu(1, "zs", 20));
//set.add(new Stu(22, "ls", 32));
set.add(new Stu(3, "ww", 42));
set.add(new Stu(11, "xm", 12));
set.add(new Stu(5, "xf", 6));


for (Stu s : set) {
System.out.println(s);
}
}

}

2.1 HashSet

HashSet 不允许有重复值, 允许有一个null, 它的优点是可以快速的帮我们查找对象, 缺点是我们无法控制对象的顺序.

2.2 LinkedHashSet

LinkedHashSet 继承了 HashSet, 它克服了 HashSet 的缺点, 我们可以按照对象插入的顺序来迭代对象.

2.3 TreeSet

TreeSet 不允许有重复值, 允许有一个null, 它包含的对象是经过排序的, 排序之后形成一个树状结构, 这就是叫它 TreeSet 的原因. 因为它要排序, 所以加入它的对象必须实现 Comparable 接口或在创建 TreeSet 时提供比较器(Comparator), 在迭代 TreeSet 时, 我们可以按照升序迭代, 也可以按照降序迭代.简单的来说可以按照一定的规则对里面的元素进行排序


comparablecomparator是两个提供排序规则的接口,一个是按照自然排序(只有它在lang),一个是比较器接口


public static void main(String[] args) {
//Set<Stu> set = new TreeSet<Stu>();
Set<Stu> set = new TreeSet<Stu>(new Comparator<Stu>() {//comparator();比较器接口

@Override
public int compare(Stu a, Stu b) {
// TODO Auto-generated method stub
return a.getName().compareTo(b.getName());
}

});
set.add(new Stu(1, "zs", 20));
//set.add(new Stu(22, "ls", 32));
set.add(new Stu(3, "ww", 42));
set.add(new Stu(11, "xm", 12));
set.add(new Stu(5, "xf", 6));

for (Stu s : set) {
System.out.println(s);
}
}


---------------------------------------微笑敬请期待下一节哦!

原创粉丝点击