Java基础笔记13

时间:2023-03-08 19:55:26

1.集合与对象数组的区别

集合与对象数组共同点:都是存放对象的容器;

区别在于:①集合是没有长度限制的;②集合容器中没有类型的限制。

2.集合(都在Java.util包下)

常用的集合:Collection、List、Set、Map

Collection

是存放单值的最大父接口,可以向其中保存多个单值(对象)数据。一般很少直接使用此接口直接操作。

List

是Collection接口的子接口,也是最常用的接口。可以存放重复的内容,是有序集合。

根据底层结构不同划分如下:

ArrayList: 底层结构为数组结构.

特点:查询,修改速度快,删除和增加慢.线程异步,线程不安全.

LinkedList: 底层结构为链表结构.

特点:查询,修改速度慢,删除和增加快.

Vector: 底层结构为数组结构.

特点:查询,修改速度快,删除和增加慢.线程同步,线程安全.

Set

是无序集合,不能存放重复元素.Set接口的主要方法与Collection是一致的。

根据底层结构不同划分如下:

HashSet:底层是一个哈希表结构.

元素存放规则:

如果存放的元素哈希值不同,则直接存放在HashSet集合中;

如果存放的元素哈希值相同,则再比较equals是否相同,如果不同则存放到HashSet集合中,如果相同则不会存放到HashSet集合中.

TreeSet: 底层是二叉树结构.

TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认采用自然排序。

自然排序:往TreeSet添加一个对象必须指定好排序规则,且TreeSet的每个对象所在类要实现Comparable接口,并重写compareTo方法才可以正常使用,否则会出现类转换异常;

定制排序:自定义排序规则,自定义排序类MyCompare必须实现Comparator接口,并重写public int compare(Object o1, Object o2){}方法,使用时在TreeSet实例化声明TreeSet ts=new TreeSet(new MyCompare());就可以正常使用,这样种情况用于开发过程中对象所在类不能实现Comparable接口的情况。

TreeSet存放元素时,使用比较器比较后,如果比较后相同,不存放;不同,则存放。

Map:是一种键值对结构.(一键对应一个值.键不允许重复.)

添加元素时,键是唯一的,如果添加相同的键元素时,则会把原来的覆盖.

如何判断键是否相同.根据Hash值以及equals判断的.

HashMap.基于哈希表的 Map 接口的实现并允许使用 null 值和 null 键,此实现是异步的,性能更高。

 Hashtable.此类实现一个哈希表任何非 null 对象都可以用作键或值。Hashtable 是同步的,性能较低。

几个常用类的区别 
1.ArrayList: 元素单个,查询,修改速度快,删除和增加慢,线程不安全 ,异步
2.Vector: 元素单个,查询,修改速度快,删除和增加慢,线程安全,同步
3.LinkedList:元素单个,查询,修改速度慢,删除和增加快

4.HashMap: 元素成对,元素可为空 ,异步的,性能更高
5.HashTable: 元素成对,线程安全,元素不可为空, 同步的,性能较低。

Iterator与 ListIterator的区别

1.  ListIterator有add()方法,可以向List中添加对象,而Iterator不能;

2.  ListIterator和 Iterator都有hasNext()和next()方法,可以实现顺序向后遍历;但 ListIterator可以实现顺序向前遍历,而Iterator不能;

3.  ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()方法可以实现,而Iterator没有此方法;

4.  ListIterator和 Iterator都可以实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现,Iterator仅能遍历,不能修改。因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。

3. 集合中常见的方法以及方法的作用

常用集合类的继承结构如下: 
Collection<--List<--Vector 
Collection<--List<--ArrayList 
Collection<--List<--LinkedList 
Collection<--Set<--HashSet 
Collection<--Set<--HashSet<--LinkedHashSet 
Collection<--Set<--SortedSet<--TreeSet 
Map<--SortedMap<--TreeMap 
Map<--HashMap

Collection  Set  HashSet  TreeSet常用方法

         public
boolean add(Object  o)  往集合中添加元素,添加成功返回true

public
boolean addAll(Collection  c)  往集合中添加多个元素,添加成功返回true

public
void clear()  移除集合中所有元素

public
boolean contains(Object  o)    如果集合包含指定元素,则返回true

public
boolean containsAll(Collection  c)   如果集合包含指定集合中的所有元素,则返回true

public
boolean remove(Object  o)   移除集合中指定元素,成功则返回true

public
boolean retainAll(Collection  c)   求两个集合的交集,并保留在集合中,成功返回true

public
int size()   返回此集合容器元素的个数

public
Object[] toArray()   返回此集合的元素对象数组

public
Iterator iterator()   返回此集合元素的迭代器,用于遍历集合元素

List  ArrayList 
LinkedList
常用方法

public Object get(int  index)  
获取指定位置上的单个元素,下标0开始

public int
indexOf(Object  o)   查询某个元素第一次在集合中的位置

public int
lastIndexOf(Object  o)   查询某个元素最后一次在集合中的位置

public ListIterator
listiterator()   返回此集合元素的列表迭代器,初始位置开始

public ListIterator
listiterator(int  index)   返回此集合元素的列表迭代器,从指定位置开始

public E set(int index, E
element)   把index位置上的元素替换为element,并返回被替换的元素

public List<E>
subList(int  fromIndex, int  toIndex)   截取从fromIndex(包括)到toIndex(不包括)的元素,返回一个集合

 

LinkedList扩充的方法

     public void addFirst(E  e)    将指定元素插入此列表的开头

public E poll()   获取并移除此列表的开头

public E pollLast()   获取并移除此列表的末尾;如果此列表为空,则返回 null

Map  Hashmap 
Hashtable
的常用方法

         public V
put (K key, V value)  添加值与键

public
int size()   返回长度

         public void
clear()   清空所有元素

public
boolean containsKey(Object  key)   是否包含指定键

public
boolean containsValue(Object  value)   是否包含指定值

public
V get(Object  o)   根据Key获取对应的value值,不包含返回null

public
Set keySet()  将此映射包含的键放入Set集合中,调用此方法后,使用增强循环或迭代器即可遍历此映射

public
V remove (Object key)  移除此键值对

public
Collection<V>values()   将此映射包含的值放入Collection中

递归调用  显示该目录下所有文件
 public class Test {
public static void main(String[] args) {
File file=new File("文件对象的路径");
Check(file);
}
/**
* 递归调用
* @param file 显示该目录下所有文件
*/
public static void Check(File file){
if (file.isDirectory()) {
File[]f=file.listFiles();
for (File i : f) {
Check(i);
}
} else {
System.out.println(file);
}
}
}