【黑马程序员】java集合框架学习总结

----- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ------

/**许多老的电子书了资料里的集合类都没有用泛型,练习的时候很麻烦。而且容器里存的都是Object应用,
 * 取出来使用要先强制类型转换,很不方便,也不安全。所以能用泛型尽量使用泛型

 *(1) Collection是顶级接口,要么创建一个Collection句柄指向子类
 * 如:Collection c1=new ArrayList<>();要么自己实现接口
 * (2)创建容器类若没有指定<T>只能存放Object对象,凡是涉及到具体类型的方法都不能用
 * (3)ArrayList基于数组,可快速增删查改,不支持线程同步
 * (4)Vector基于数组,可增删查改,支持线程同步,但效率比ArrayList低
 *        因为基于数组。所以ArrayList和Vector创建的时候就要指定元素类型
 * (5)LinkedList链表,支持快速遍历,随机访问比较慢
 *        而LinkedList每一个节点都可以是不同类型的对象
 *         LinkList特有的方法 peek=get(0)  poll=get(0)+remove(0)  push=addfirst()  pop=get(0)
 *         LinkList的Listiterator(int index)的返回值是元素的迭代器
 *         LinkList.equal比较的是所有元素的值。
 *  (6)LinkedHashSet相比HashSet可以按放入元素的顺序遍历。
 *  (7)TreeSet可以按照自己的规则来给元素排序,只要继承Comparator接口,
 *          实现里面的compare(Object ,Object)方法即可.
 *          TreeSet xxx=new TreeSet(new ComparatorByXxx());   
 *         class ComparatorByXxx implements Comparator<Object>{
 *         @Override  public int compare(Object o1, Object o2) {。。。}}
 *           还可以让比较对象本身实现Comparable接口。
 *  (8)实现了Comparable接口的类的comparTo()返回值如果返回一个正数,
 *     则表明obj1大于obj2,如果是 负数,则表明obj1小于obj2。
 *     如果我们将两个对象的equals方法总是返回true,
 *     则这两个对象的compareTo方法返回应该返回0

 *  (9)boolean retainall(Collection coll) 取交集

 *(10)对于一个陌生的容器类,类名的末尾单词是它的接口,漆面的是它的实现

 */

package CollectionDemo.src;
import java.nio.channels.Pipe;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.TreeSet;
import java.util.Vector;

import javax.swing.Popup;

import org.omg.CORBA.PUBLIC_MEMBER;
import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;

public class CollectionDemo {
    public static void main(String[] args) {
	Collection c1=new ArrayList(); //未用泛型
	c1.add("abc");
	System.out.println(c1.toString());
	c1.add("efg");
	System.out.println(c1.toString());
	c1.add(false);
	System.out.println(c1.toString());
	c1.add(String.valueOf(false));
	System.out.println(c1.toString());
	Object[] obj1=c1.toArray();
	//测试存入容器是否会丢失类型信息
	if(Boolean.valueOf(obj1[2].toString())==Boolean.valueOf(obj1[3].toString())){
		System.out.println("!!!");		
	}else{
	    System.out.println("----");
	}
	System.out.println(obj1[2].toString());    
	System.out.println(obj1[3].toString());    
	for(int i=0;i<obj1.length;i++){
	    System.out.println(obj1[i]); 
	}
	Object o1=new Integer(10);
	o1=100;
	Object o2=new Integer(100);
	System.out.println("o1==o2? "+o1.equals(o2));     
	ArrayList<Integer> a1=new ArrayList<>();//使用泛型
	a1.add(1);
	a1.add(12);
	a1.add(123);
//	a1.set(3, new Integer(1234));
//	a1.set(3, new Integer("5678"));
	Iterator<Integer> i1=a1.iterator();
	System.out.println(a1.getClass().isArray());
	while(i1.hasNext()){
	    System.out.println(i1.next());
	}
	List list=new  ArrayList<>();
	Integer iint2=333;
	A a=new A();
	a.age=10;
	xxx(a);
	 System.out.println(a.age);
	 LinkedList link1=new LinkedList<>();//链表
	 LinkedList link2=new LinkedList<>();
	 LinkedList link11=new LinkedList<>();
	 LinkedList link22=new LinkedList<>();
	 LinkedList link0=new LinkedList<>();
	 link11.add(23);
	 link22.add(34);
	 link1.add("123");
	 link1.add(false);
	 link1.add(a1);
	 link0.add(link11);
	 link2.add("123");
	 link2.add(false);
	 link2.add(a1);
	 link0.add(link22);
	 link1.add(link0);
	 link2.add(link0);
	 LinkedList link00= (LinkedList) link1.peekLast();
	 link00.add(10000);
	 ListIterator<ArrayList<Integer>> it0=link1.listIterator(3);
	 while(it0.hasNext()){
	     System.out.println(it0.next());
	 }
	
	 LinkedList<Integer> linka=new LinkedList<Integer>();
	 LinkedList linkb=new LinkedList<Integer>();
	 int int1=3,int2=6,int3=998;
	 System.out.println("*******************");
	Person p1=new Person("goc",23);
	Person p2=new Person("sb",34);
	Person p3=new Person("gag",54);
	Person p4=new Person("ede",30);
	TreeSet ts=new TreeSet();
	ts.add(p1);
	ts.add(p2);
	ts.add(p3);
	ts.add(p4);
	Iterator itts=ts.iterator();  //利用迭代器遍历
	while(itts.hasNext()){       
	    Person p=(Person) itts.next();
	    System.out.println(p.getName()+":"+p.getAge());
	}
	LinkedHashSet lhs=new LinkedHashSet();
	lhs.add("adfdg");
	lhs.add("bdfadf");
	lhs.add("cfdf");
	Iterator it_lhs=lhs.iterator();
	while(it_lhs.hasNext()){
	    System.out.println("lhs    " +it_lhs.next());
	}
	HashSet hs=new HashSet();
	hs.add("afdasf");
	hs.add("bdd");
	hs.add("cdafd");
	Iterator it_hs=hs.iterator();

	while(it_hs.hasNext()){      //遍历哈希集合
	    System.out.println("hs    " +it_hs.next());
	}
		 
    }

    public static void xxx(A a){
	a.age++;
    }
 class Duilie{          //队列
     LinkedList<String> list;
     Duilie(){
	 list=new LinkedList<>();
     }
     public void myAdd(String str){
	 list.add(str);
     }
     public String myGet(){
	 return list.getFirst();
     }
 }
}


------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值