集合和数组的特点对比:
-
集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生变化
-
数组和集合的区别:
-
共同点:都是存储数据的容器
-
不同点:数组的容量是固定的,集合的容量是可变的
-
1、arrayList
-
public ArrayList():创建一个空的集合对象
-
public boolean add(E e):将指定的元素追加到此集合的末尾
-
public void add(int index,E element):在此集合中的指定位置插入指定的元素
注意:集合容器中如果没有加入<>就可以存储任意数据类型
<>泛型:对集合容器存储的数据类型进行限制
//创建集合容器对象
ArrayList list = new ArrayList();
//ArrayList<String> list = new ArrayList<>();
//调用对象的add方法,向容器中添加数据
list.add("aaa");
list.add(123);
list.add(true);
list.add(0,666);//可以插队
ArrayList集合常用的方法:
-
public boolean remove(Object o):删除指定的元素,返回删除hi否成功
-
注意:根据元素进行删除,只能删除集合中的第一个元素
-
-
public E remove(int index):删除指定索引处的元素,返回被删除的元素
-
public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
-
public E get(int index):返回指定索引处的元素
-
public int size()::返回集合中的元素的个数
2、Connection
connection集合常用方法:
-
boolean add(E e) :添加元素
-
boolean remove(Object o):从集合中移除指定元素
-
void clear():清空集合中的元素
-
boolean contains(Object o):判断集合中是否存在指定的元素
-
boolean isEmpty():判断集合是否为空
-
int size():集合的长度,也就是集合中元素的个数
Connection集合的遍历:
Iterator:迭代器,集合的专用遍历方式
-
Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
-
迭代器是通过集合的iterator()方法得到的,所以我们说它是依赖于集合而存在的
Connection<String> c = new ArrayList<>(); Iterator<String> it = c.iterator();
Iterator中常用的方法:
-
E next():返回迭代中的下一个元素
-
boolean hasNext():如果迭代具有更多元素,则返回true
3、List
list集合概述:
-
有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素
-
与Set集合不同,列表通常允许重复的元素
lisy集合特点:
-
有序:存储和取出的元素顺序一致
-
可重复:存储的元素可以重复
List集合特有的方法,collection集合没有的,它的儿子ArrayList集合有的
-
void add(int index,E element):在此集合中的指定位置插入指定的元素
-
E remove(int index):删除指定索引处的元素,返回被删除的元素
-
E set(int index,E element):修改指定索引处的元素,返回被修改的元素
-
E get(int index):返回指定索引处的元素
ListIterator:列表迭代器
-
通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
-
用于允许程序员沿任怡方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
ListIterator中常用的方法:
-
E next():返回迭代中的下一个元素
-
boolean hasNext():如果迭代具有更多元素,则返回true
-
E previous():返回列表中的上一个元素
-
boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true
-
void add(E e):将指定的元素插入列表
List集合常用子类:Array List、LinkedList
-
Array List:底层数据结构是数组,查询快。增删慢
-
LinkedList:底层数据结构是链表,查询慢,增删快
-
LinkedList:集合特有的功能入下
-
public void addFirst(E e):在该列表开头插入指定的元素
-
public void addLast(E e):将指定的元素追加到此列表的末尾
-
public E getFirst():返回此列表中的第一个元素
-
public E getLast():返回此列表中的最后一个元素
-
public E removeFirst():从此列表中删除并返回第一个元素
-
public E removeLast():从此列表中删除并返回最后一个元素
-
LinkedHashSet集合特点:
-
哈希表和链表实现的Set接口,具有可预测的迭代次序
-
由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
-
由哈希表保证元素唯一,也就是说没有重复的元素
4、增强for循环
增强for:简化数组和Collection集合的遍历
-
实现Iterable接口的类允许其对象成为增强型for语句的目标
-
他是jdk5之后出现的,其内部元素是一个Iterator迭代器
增强for的格式
for(元素数据类型 变量名:数组或者Collection集合){
//在此处使用变量即可,该变量就是元素
}
//例如
int[] arr = {1,2,3,4,5};
for(int i : arr){
System.out.println(i);
}
5、哈希值
哈希值:是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值
Object类中有一个方法可以获取对象的哈希值
-
public int hashCode():返回对象的哈希码值
对象的哈希值特点
-
同一个对象多次调用hashCode()方法返回的哈希值是相同的
-
默认情况下,不同对象的哈希值 是不同的,而重写hashCode()方法,可以实现让不同的哈希值相同
6、HashSet集合
hashSet特点:
-
底层数据结构是哈希表
-
对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
-
没有带索引的方法,所以不能使用普通for循环遍历
-
由于是Set集合,所以不包含重复元素的集合
HashSet<String> hs = new HashSet<>();
hs.add("hello");
hs.add("world");
hs.add("java");
for(String s : hs){
System.out.println(s);
}
//控制台输出的结果并不是按照添加顺序的
//输出:world,java,hello
hs.add("java");
for(String s : hs){
System.out.println(s);
}
//输出的还是world,java,hello,所以hashSet不包含重复元素的
HashSet集合存储学生对象时,在学生类中要重写hashCode()和equals()方法
7、TreeSet集合
TreeSet集合特点:
-
元素有序,这里的顺序不是指存储顺序和取出顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法:
-
TreeSet():根据其元素的自然排序进行排序
-
TreeSet(Comparator comparator):根据指定的比较器进行排序
-
-
没有带索引的方法,所以不能使用普通for循环遍历
-
由于是Set集合,所以不包含重复元素的集合
TreeSet<Integer> ts = new TreeSet<>();
ts.add(10);
ts.add(20);
ts.add(50);
ts.add(40);
ts.add(30);
ts.add(30);
for(Integer i:ts){
System.out.println(i);
}
//会输出:10,20,30,40,50///不会有重复,会自己排序
自然排序Comparable的使用:
//在学生类里实现方法:
//然后重写compareTo()方法
public int compareTo(Student s){
//按照年龄从小到大排序
int num = this.age-s.age;
//年龄相同时,按照姓名的字母顺序进行排序
int num2 = num==0?this.name.compareTo(s.name):num;
return num2;
}
8、泛型
泛型:是jdk5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型,它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数
提到参数,最熟悉的就是定义方法时有形参,有调用此方法时传递的实参。那么参数化类型怎么理解呢?
顾名思义,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型
这种参数类型可以用在类、方法和接口中,分别被称为泛型类,泛型方法,泛型接口
泛型定义格式:
-
<类型>:指定一种类型的格式。这里的类型可以看成是形参
-
<类型1,类型2...>:指定多种类型的格式,多种类型之间用逗号隔开。这里的类型可以看作是形参
-
将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型
9、可变参数
可变参数又被称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了
-
格式:修饰符 返回值类型 方法名(数据类型...变量名){ }
-
范例:public static int sum(int...a){ }
可变参数注意事项:
-
这的变量是一个数组
-
如果有多个参数,包含可变参数,可变参数放最后
-
例如:public static int sum(int a,int...b){}
-
10、Map集合
Map集合概述:
Interface Map<K,V> K:键的类型; V:值的类型
讲键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值
//创建Map集合的对象
//多态的方式
//集体的实现类HashMap
Map<string,String> map = new HashMap<>();
map.put("it001","林青霞");
map.put("it002","张曼玉");
map.put("it003","王祖贤");
map.put("it003","柳岩");//当这个键第二次出现时,里面的值会把上一个的值替换掉
System.out.println(map);
Map集合的基本功能:
V put(K key,V value) 添加元素
V remove(Object key) 根据键删除键值对元素
void clear() 移除所有的键值对元素
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也是集合中键值对的个数
11、collections概述和使用
Collections类是针对集合操作的工具类
Collections常用方法:
public static <T extends Comparable<?super T>> void sort(List<T> list):将指定的列表按升序排序
public static void reverse(List<?> list):反转指定列表中元素的顺序
public static void shuffle(List<?> list):使用默认的随机源随机排列指定的列表
关于集合的学习笔记就分享到这里啦,先收藏然后放入自己的记事本,配合这案例慢慢去敲去领悟它吧】】】