JAVA基础之集合框架

一、List 接口

常用方法如下:

add(Object obj)

向List的尾部添加一个元素obj

add(int i, Object obj)

向List中索引i 的位置添加元素obj

set(int i, Object obj)

使用元素obj替换索引i 位置的元素,并返回被替换的元素。

remove(int i)

删除索引i 指定位置的元素,并返回被删元素

get(int i)

返回索引i 指定位置的元素。

indexOf(Object obj)

返回元素obj在List中第一次出现的索引位置,如果List中不包含元素obj,则返回-1。

lastIndexOf(Object obj)

返回元素obj在List中最后一次出现的索引位置,如果List中不包含元素obj,则返回-1。

subList(int start, int end)

返回List从start到end-1区间的元素。

iterator()

将List装入迭代器。

二、List的实现类ArrayList(数组线性表)

ArrayList使用连续的内存单元存储数据元素,当添加或删除数据元素时(除了数组链表的最后位置外),ArrayList需要移动其被添加(或删除)元素后面的全部元素。

在遍历所有元素方面,ArrayList具有很好的效率,由于其数据元素的连续性,所有只需要将当前元素的指针下移就可以达到效果。

适合范围

1.ArrayList适合存储被查询出的结果集,并且不对结果集修改,而仅仅是用于客户显示。
2.如果我们只是在ArrayList的末尾进行追加操作时,可以使用ArrayList。


三、List的实现类LinkedList(双链表)


LinkedList是使用指针关联的双向链表,其获取下一个元素的方式是通过指向下一个元素地址的对象(通常叫做指针)获取的,由于他的链式存储结构,LinkedList在任意

位置的数据元素插入和删除的效率都不错,因为这个过程不需要移动LinkedList中的其他元素,所以当你的需求是对某个线性结构进行频繁的插入和删除操作时,首选

的List应该是LinkedList。

适合范围

1.LinkedList对于ArrayList来说,其遍历速度较慢,因为他获取下一个元素的时间为寻址时间。
2.LinkedList适合存储数据元素变动较大的线性集合,可以更快速的对指定位置的元素进行增加、删除、修改和查询功能。

四、ArrayList和LinkedList区别

1.底层结构:

ArrayList:数组(内存结构连续)

LinkedList:底层结构:双链表(内存结构可能连续、可能不连续)

2.性能方面:

ArrayList:查找时性能高。

LinkedList:较节省内存,增加|删除元素性能高

五、List的实现类Vector

Vector是一个Object类型的可变长的数组,其元素类型可以是任意的数据类型(Object的子类),我们使用Vector

通常是存储元素类型不同,但描述对象又统一的集合。Vector不要求每个元素的大小都一致,所以Vector在分配内

存空间的时候是根据每个元素的大小动态分配的,但是这样也为Vector中的元素的移动带来了问题,因为元素的移

动会导致内存区域的重新划分,所以,如果你需求的集合对象是一个需要元素移位的结构,请慎重使用Vector。

六、ArrayList和Vector区别

1.Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
2.当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

七、Stack栈:先进后出(LIFO表)

Stack<Integer> st=new Stack<>();
System.out.println(st.empty());
		
st.push(1);
st.push(2);
st.push(3);
st.push(4);
st.push(5);
System.out.println(st.peek());
System.out.println(st.search(2));
		
System.out.println(st.empty());
for(int i=1;i<=5;i++){
	System.out.println(st.pop());
}
		
System.out.println(st.empty());

八、Set接口

特点:元素不重复、无序(没有索引)

使用场景:元素的去重

Set里存储自定义类的对象,如何保证元素不重复?
答:①当我们使用Set存储自定义类的对象时,需要在自定义类中重写equals和hashCode方法,主要原因是

集合内不允许有重复的数据元素,在集合校验元素的有效性时(数据元素不可重复),需要调用equals

和hashCode验证。
②HashSet在判断数据元素是否重复时,需要同时满足hashCode值相同和equals方法返回true

九、Set的实现类之一HashSet类

Set<Integer> set=new HashSet<>();
set.add(1);
set.add(12);
set.add(2);
set.add(3);
set.add(4);
if(set.contains(12)){
	set.remove(12);
	set.add(120);
}
//遍历:
/*Iterator<Integer> its=set.iterator();//返回迭代器
while(its.hasNext()){
	System.out.println(its.next());
}*/
		
for(Integer i:set){
	System.out.println(i);
}
十、SortedSet的实现类TreeSet

实现了排序的Set接口,采用自然排序升序或者自定义排序规则的方式进行排序;但需要注意的是,仍然不提供

索引机制TreeSet中的元素如果是自定义类的对象时,那该类需要实现Comparable接口,实现其CompareTo()方

法,以提供判断大小的依据

SortedSet<String> sSet=new TreeSet<>();
sSet.add("45");
sSet.add("4");
sSet.add("1425");
sSet.add("450");
sSet.add("451");
sSet.add("495");

for(String i:sSet){
	System.out.println(i);
}
在TreeSet中装自定义类型的对象时:
 
自定义类型一定要实现Comparable接口,并且重写compareTo方法、
 
SortedSet<Student> sSet=new TreeSet<>();
Student s1=new Student("003", "张三");
Student s2=new Student("002", "李思");	
		
sSet.add(s1);
sSet.add(s2);
for(Student stu:sSet){
	System.out.println(stu);
}
十一、Map接口

java中使用Map接口描述映射结构,映射Map是一个独立的接口,描述的是键key-值value的对应关系,Map

不允许键重复,并且每个键只能对应一个值。

十二、Map的实现类  HashMap

Map<Integer,String>  map=new HashMap<Integer,String>();
		
		map.put(1, "001");
		map.put(2, "002");
		map.put(3, "003");
		map.put(4, "004");
		map.put(5, "005");
		
		
		//Map的遍历方法
		/*for(int i=1;i<=5;i++){
			System.out.println(map.get(i));
		}*/
		
		//方法一:
		//Set<Integer> keySet=map.keySet();//返回当前map的键的Set集合
		/*for(Integer key:map.keySet()){
			System.out.println(key +"---"+map.get(key));
		}*/
		
		//方法二:
		Set<Entry<Integer,String>> entrySet=map.entrySet();
		for(Entry<Integer,String> en:entrySet){
		System.out.println(en.getKey()+"--"+en.getValue());
			
		}

特点:

①HashMap中不允许有重复的键的元素,如果有,后者覆盖前者。

②HashMap中允许有一个元素的键为null。
HashMap和Hashtable的区别?

1、HashMap中允许有一个元素的键为null,Hashtable中不允许。
2、二者直接父类不同:HashMap继承AbstractMap,Hashtable继承自Dictionary。
3、是否线程安全:Hashtable是线程安全地,HashMap是非线程安全地。


在JDK1.5加入ConcurrentHashMap,可以保证线程安全。
Fail-fast机制(快速失败机制):HashMap中,如果在一个线程读取数据的同时,有另一个线程修改了数据,会抛出异常。
Hashtable没有这个机制。

十三、SortedMap接口、TreeMap实现类
1.TreeMap按照key的自然顺序进行排序
2.如果key是自定义类的对象,那么需要在自定义类中实现Comparable接口,实现ComparTo()方法


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值