java数据结构详解

本文详细介绍了Java集合框架中的List、Set和Map接口及其具体实现类,包括LinkedList、ArrayList、HashSet、TreeSet、HashTable、HashMap和TreeMap等。通过示例代码展示了如何使用这些集合类进行数据操作。
摘要由CSDN通过智能技术生成

一、List接口,有序的Collection接口,能够精确地控制每个元素插入的位置,允许有相同的元素

1.链表,LinkedList实现了List接口,允许null元素,提供了get()、remove()、insert()方法,没有同步方法

[java]  view plain  copy
  1. public void add() {                                      
  2.         LinkedList List = new LinkedList();                
  3.         List.add("link1");  
  4.         List.add("link2");  
  5.         List.add("link3");  
  6.         Iterator it = List.iterator();                     
  7.         while (it.hasNext()) {  
  8.             System.out.println(it.next());  
  9.         }  
  10.         it.remove();                                          
  11.         Iterator it1 = List.iterator();                       
  12.         for (int i = 0; i < List.size(); i++) {  
  13.             System.out.println(it1.next());  
  14.         }  
  15.     }  

2.数组列表,ArrayList,可以动态变化容量的数组,非同步的

数组列表中存放的是Object类型,因此在数组列表中存放的对象类型,以其原型的父类代替,提取其中的元素时要进行类型转换

[java]  view plain  copy
  1. public static void main(String[] args)  
  2.     {  
  3.         ArrayList al=new ArrayList();                        
  4.         al.add("name");  
  5.         al.add("value");  
  6.         al.add("number");  
  7.         for(int i=0;i<al.size();i++)  
  8.         {  
  9.             System.out.println(al.get(i));  
  10.         }  
  11. }  

二、Set接口,不包含重复元素的Collection接口
1.散列集,HashSet,实现了Set接口,非线性同步
与链表和数组列表几乎类似,但在数据处理时,比使用链表进行数据处理花费时间更短,处理大数据时通常使用散列集

[java]  view plain  copy
  1. public static void main(String[] args)  
  2.    {  
  3.        long time=0;  
  4.        HashSet hs=new HashSet();  
  5.        ArrayList al=new ArrayList();  
  6.        long starttime=System.currentTimeMillis();  
  7.        for(int i=0;i<10000;i++)  
  8.        {  
  9.            hs.add(new Integer(i));  
  10.        }  
  11.        System.out.println(System.currentTimeMillis()-starttime);  
  12.        for(int i=0;i<10000;i++)  
  13.        {  
  14.            al.add(new Integer(i));  
  15.        }  
  16.        System.out.println(System.currentTimeMillis()-starttime);     
  17.    }  

2.树集,TreeSet,实现了Set接口,实现了排序功能,该集合中的元素默认按升序排列元素
使用树集数据结构的对象,需要实现Comparable接口,树集输出的数据都是经过排序的


三、Map接口,没有继承Collection接口,其提供key到value的映射,Map中不能包含相同的key,每个key只能映射一个value。
1.散列表类,HashTable,继承了Map接口,非空(non-null)的对象都可作为key或value,是同步的
添加数据:put(key,value);
取出数据:get(key);
特点:无序的,因此可以快速查找特定的元素
[java]  view plain  copy
  1. public static void TableTest(){  
  2.         Hashtable ht = new Hashtable();  
  3.         ht.put("key1""value1");  
  4.         ht.put("key2""value2");  
  5.         String value1=(String)ht.get("key2");  
  6.         System.out.println(value1);  
  7.     }  

构造函数:Hashtable(),初始容量11,负载因子0.75,即散列表中已经有75%的位置被放满,则进行再散列。
负载因子越高(越接近1),则内存使用率越高,元素的寻找时间越长,反之,则内存浪费越多,寻找时间越短
key的对象将通过计算散函数确定与之对应的value位置 ,因此key的对象需要实现hashCode()和equals()方法。
两个对象相同,则它们的hashCode必须相同;两个对象不同,则它们的hashCode不一定不同。
冲突:不同对象的hashCode相同,则称为冲突,冲突将导致操作散列表的时间开销增大。因此要同时复写equals()和hashCode()方法
2.散列映射类,HashMap,与HashTable类似,不是HashMap是非同步的,且允许null
[java]  view plain  copy
  1. public static void Maptest(){  
  2.         Map<string string=""> map=new HashMap<string string="">();  
  3.         map.put("key1""value1");  
  4.         map.put("key2""value2");  
  5.         map.put("key3""value3");  
  6.         for(Map.Entry<string string=""> entry:map.entrySet()){  
  7.             System.out.println(entry.getKey());  
  8.             System.out.println(entry.getValue());  
  9.         }  
  10.         String value1=(String)map.get("key1");  
  11.         System.out.println(value1);  
  12.     }  
  13. </string></string></string>  

3.树映像,TreeMap,输出的数据按照关键字排序了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值