Java高级部分--集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java高级部分--集合相关的知识,希望对你有一定的参考价值。

一.集合类

Java中数组与集合的比较
1.数组也是容器,它是定长的,访问较快,但是数组不会自动扩充
2.数组可以包含基本数据类型或引用类型的对象,而集合中只能包含引用类型的对象

 

Java中集合框架层次结构

技术分享

Collection接口

1.一组称为元素的对象

2.一个Collection中可以放不同
类型的数据
1.是Set接口和List接口的父类
2.是否有特定的顺序以及是否允许重复,取决于它的实现

3.Set - 无序的集合;不允许重复  如:HashSet
4.List - 有序的集合;允许重复  如:ArrayList,LinkedList

Set接口
1.Collection的子接口
2.用来包含一组 无序无重复 的对象
3.无序-----是指元素存入顺序和集合内存储的顺序不同
4.无重复------两个对象e1和e2,如果e1.equals(e2)返回true,则认为e1和e2重复

Set接口的实现类 
1.HashSet-----HashSet的特性在于其内部对象的散列存取,即采用哈希技术
2.TreeSet-----TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的

List接口

1.Collection的子接口
2.用来包含一组 有序有重复 的对象
3.List中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素
4.List有两种主要的集合实现类:ArrayList,LinkedList

List接口的实现类
1.ArrayList是线性顺序存储的,是一种线性表
2.它的特性和数组很接近,数组大小是不变的,而ArrayList的大小是可以动态改变的

3.LinkedList最主要的功能方面的增强是可以在List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现

ArrayList与LinkedList的比较
  存储结构
1.ArrayList是线性顺序存储
2.LinkedList对象间彼此串连起来的一个链表
  操作性能
1.ArrayList适合随机查询的场合
2.LinkedList元素的插入和删除操作性高

Map接口
1.Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象
2.Map是不同于Collection的另外一种集合接口
3.Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的
  Map接口有两个实现
1.HashMap — key/value对是按照Hash算法存储的
2.TreeMap — key/value对是排序(按key排序)存储的

HashMap与TreeMap的比较
1.HashMap基于哈希表实现
2.TreeMap基于树实现
3.HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用
4.TreeMap没有调优选项,因为该树总处于平衡状态
5.HashMap性能优于TreeMap

Iterator接口
1.Iterator对象称作迭代器,用来方便的实现对容器内的元素进行遍历操作
2.所有实现了Collection接口的集合类都有一个iterator( )方法,返回一个实现了Iterator接口的对象
3.Iterator对象实现了统一的一个用来遍历Collection中对象的方法
4.Iterator是为遍历而设计,能够从集合中取出元素和删除元素,但是没有添加元素的功能
5.Iterator的功能上比较简单,使用中,只能单向移动

hasNext方法

用来判断指针右边是否还有数据

Next方法

将指针向右移动一次,将划过的数据取出来

Iterator<String>    iter=hs1.iterator();
           while(iter.hasNext()){
System.out.println( iter.next());
  }

如何选择集合类
1.Set内存放的元素不允许重复,List存放的元素有一定的顺序
2.Map的应用主要在利用键/值对进行快速查询
3.ArrayList和LinkedList的区别在于随机查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好 
4.HashSet和TreeSet的区别在于集合内元素是否排序 

 

 

collection接口

 1 package util1;
 2 
 3 import java.util.Collection;
 4 import java.util.HashSet;
 5 
 6 public class Collection1 {
 7 
 8     /**
 9      * @param args
10      */
11     public static void main(String[] args) {
12         
13         //实例化对象
14         Collection   c1=new HashSet();   //向上转型---  声明成接口类型,调用实现类的构造方法
15         Collection   c2=new HashSet(); 
16          //添加数据
17         c1.add(1);
18         c1.add("你");
19         c1.add(new  A());  
20         
21         System.out.println(c1);    //整体取出数据:直接输出集合名称  
22         
23         c2.addAll(c1);   //添加其他集合
24         System.out.println(c2.size());    //取集合长度
25         System.out.println(c2.contains("sgtht"));   //判断是否包含某些数据
26         
27         System.out.println("///////////////");   
28        Object  o[]    =c2.toArray();    //将集合转换成数组
29        /*for(int i=0;i<o.length;i++){
30            System.out.println(o[i]);
31        }*/
32        
33          System.out.println(o[0]);
34          System.out.println(o[1]);
35          System.out.println(o[2]);
36        
37         
38     }
39 
40 }

set集合

hashSet,treeSet

 1 package util1;
 2 
 3 import java.util.HashSet;
 4 import java.util.Iterator;
 5 import java.util.TreeSet;
 6 
 7 public class HashSet1 {
 8 
 9     /**
10      * set接口的特点(集合)
11      *     hashset:   无顺序,数据不能重复,长度可扩展
12      *     treeset:  按照自然顺序排列数据,数据不能重复,能够比较大小
13      * 
14      */
15     public static void main(String[] args) {
16         
17           HashSet<String>   hs1=new HashSet<String>();
18           hs1.add("a");
19           hs1.add("b");
20           hs1.add("b");
21           hs1.add("c");
22 /*          System.out.println(hs1);  
23           
24           //挨个取出集合中的数据
25          Iterator<String>    iter=hs1.iterator();
26           while(iter.hasNext()){
27              System.out.println( iter.next());
28           }
29           */
30           
31           
32             TreeSet<Integer>   ts1=new TreeSet<Integer>();
33             ts1.add(1);
34             ts1.add(768);
35             ts1.add(43);
36             ts1.add(43);
37             ts1.add(87);
38             System.out.println(ts1); 
39             
40             
41           //类型转换异常
42             
43             TreeSet  ts2=new TreeSet();
44             ts2.add("adsf");
45             ts2.add("u11");    
46             ts2.add("caa");
47             System.out.println(ts2);  
48     }
49 
50 }

list集合

linkedList

 1 package util1;
 2 
 3 import java.util.HashSet;
 4 import java.util.Iterator;
 5 import java.util.LinkedList;
 6 
 7 public class List1 {
 8 
 9     /**
10      *    list(列表):   下标从0开始
11      *        
12      *          linkedList:  方便首尾操作 ,    数据可重复,有顺序,长度可扩展
13      *          ArrayList:(数组列表)  :   数据可重复,有顺序,长度可扩展
14      * 
15      */
16     public static void main(String[] args) {
17        
18         LinkedList<Integer>   ll=new LinkedList<Integer>();
19         ll.add(1);
20         ll.add(454);
21         ll.add(454);
22         ll.add(454);
23         ll.add(454);
24         ll.add(242);
25         ll.add(0, 88);
26         //ll.add(10, 77);
27         System.out.println(ll);  
28         ll.addFirst(66);
29         System.out.println(ll);
30         System.out.println(ll.get(4));    //按照下标取数据
31         
32         System.out.println("///////////////////");  
33     
34         for(int i=0;i<ll.size();i++){
35             System.out.println(ll.get(i));             
36         }
37         
38         System.out.println("///////////////////");  
39         
40         Iterator<Integer>  it=ll.iterator();
41         while(it.hasNext()){
42             System.out.println(it.next());          
43         }
44         
45         System.out.println("///////////////////");  
46         //foreach循环,增强的for循环------提高效率(封装了迭代器)
47           for(Integer   in:ll){
48               System.out.println(in);
49           }
50   
51     }
52 
53 }

map接口

hashmap集合

 1 package util1;
 2 
 3 import java.util.HashMap;
 4 import java.util.Iterator;
 5 import java.util.Map;
 6 import java.util.Set;
 7 import java.util.Map.Entry;
 8 
 9 public class Map1 {
10 
11     /**
12      * map:数据成对存放
13      *     HashMap:  无序存放     key值不能重复,如果key值重复,会替换掉原来的键值对
14      * 
15      * 
16      */
17     public static void main(String[] args) {
18         //声明键值对容器
19         HashMap  hm1=new HashMap<String, String>();
20        
21         hm1.put("1", "a");  
22         hm1.put("2", "b");
23         hm1.put("2", null);  
24         hm1.put("3", "c");
25       System.out.println(hm1); 
26         
27         Set  keys=hm1.keySet();   //将所有key值取出组合成一个set集合
28       /*   Iterator<String>   it=keys.iterator();
29           while(it.hasNext()){                  //循环所有key值
30         //    System.out.println(hm1.get(it.next()));      //根据key值获取value值              
31           }*/
32         
33         
34         Map<String, String>  m1=new HashMap<String, String>();   
35         //向上转型:  节省内存   ,可用接口中的方法,实现类重写的方法,不能用实现类独有的方法
36           m1.put("1", "a");  
37           m1.put("2", "b");
38           m1.put("2", "c");  
39           m1.put("3", "c");
40           System.out.println(m1);
41           
42           Set<Map.Entry<String, String>>  ens=m1.entrySet();   
43           for(Entry<String, String>  e:ens){
44                System.out.println(e.getKey());  
45                System.out.println(e.getValue());  
46           }
47           
48     }
49 
50 }

treemap集合

 1 package util1;
 2 
 3 import java.util.TreeMap;
 4 
 5 public class TreeMap1 {
 6 
 7     /**
 8      *   treemap:   按照key值的自然顺序排列数据,要求key值可以比较大小
 9      */
10     public static void main(String[] args) {
11         
12            TreeMap   tm1=new TreeMap<Integer, String>();
13            tm1.put(44, "gf");
14            tm1.put(4654, "gf");
15            tm1.put(42, "gf");
16            tm1.put(4, "gf");
17            System.out.println(tm1);  
18           System.out.println(tm1.floorKey(5));   //得到小于参数的一个key值
19           System.out.println(tm1.floorEntry(5));  //得到小于参数的一个键值对
20 
21     }
22 
23 }

日期

 1 package util1;
 2 
 3 import java.text.SimpleDateFormat;
 4 import java.util.Calendar;
 5 import java.util.Date;   //引包
 6 
 7 public class Date1 {
 8 
 9     
10     public static void main(String[] args) {
11         
12             //当前时间
13             Date   d1=new Date();    //当时的时间
14             System.out.println(d1);  
15             
16             SimpleDateFormat   sdf=new SimpleDateFormat("yyyy年MM月dd日   a hh:mm:ss");
17             String  time1=sdf.format(d1);
18             System.out.println(time1); 
19             
20             
21             //日历类
22            Calendar   c= Calendar.getInstance();  //反转获得时间
23            c.set(2011,11,29);  //自定义的时间
24           System.out.println(c.get(Calendar.YEAR)); 
25 
26     }
27 
28 }

 














































以上是关于Java高级部分--集合的主要内容,如果未能解决你的问题,请参考以下文章

Java自用高级编程-1.多线程

阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_5_迭代器的代码实现

Java进阶之光!2021必看-Java高级面试题总结

《Java高级语法》第12节:Lambda表达式

部分代码片段

阶段1 语言基础+高级_1-3-Java语言高级_04-集合_03 斗地主案例(单列)_2_斗地主案例的代码实现