数组
数组的三种定义方式
①.数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
如:int[] arr = new int[3];
②.数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…};
如:int[] arr = new int[]{1,2,3,4,5};
③.数据类型[] 数组名 = {元素1,元素2,元素3…};
如:int[] arr = {1,2,3,4,5};
数组中没有length()方法,只有length属性,数组array.length返回的是数组的长度。String是由length()方法的,str.length()返回的是字符串的长度。
集合
collection分为list和set
①.list的是元素有序可以重复
list接口的主要实现类是ArrayList和LinkedList
②.set是无序不可重复
set接口的主要实现类是HashSet和TreeSet
集合的常用方法:add添加、clear清除所有数据、remove把给定的对象在当前集合中删除、contains判断当前集合是否有给定的对象、isEmpty判断当前集合是否为空、size返回集合中的个数、toArray把集合中的元素存储到数组中。
数据结构
栈、队列、数组、链表和红黑树。
栈:先进后出,压栈
队列:先进先出
数组:Array有序的元素数列,数组在内存中开辟一段连续的空间。特点是查找速度快可以根据数组的索引查找到指定元素。增删元素慢,需要创建新数组将指定元素存储在指定的索引位置,然后将添加的索引添加到数组后边。
链表:多个节点之间,通过地址进行链接。特点:查找元素慢,想要查找元素需要通过链接的节点,依次向后查找指定元素,增删元素快。
List
list有序可重复
ArrayList是数组结构,查找方便增删改慢。
LinkedList集合是链表结构查找慢增删改方便。
LinkedList提供了大量的首位操作的方法。(了解)
set
set集合是无序不可重复的
HashSet是Set接口的一个实现类,HashSet的底层实现是由HashMap支持,HashSet是根据哈希值还判断元素在集合中存储的位置所以有良好的存取和查找的功能。保证元素唯一性的约束时hashcode和equals方法。
LinkedHashSet是有序的它是有一个链表和哈希表组合的一个数据存储结构。
Map
map是成对出现的是键值对,键值是唯一的值是可重复的。map<key,value>
Map的子类
1.HashMap<k,v>:存储数据采用哈希表,元素的存储顺序不能保持一致。由于要保证键的唯一,所以重写hashcode()和equals()方法。?
2.LinkedHashMap:存储的数据采用哈希表加链表,由于链表的作用可以使元素存储的顺序一致,通过哈希表结构可以保证的键唯一,不重复,所以需要重写键的hashcode()和equals()方法。?
3.map中的常用方法
Map集合遍历方式
1.键找值的方式。
2.entry键值对对象。
public class MapDemo02 {
public static void main(String[] args) {
// 创建Map集合对象
HashMap<String, String> map = new HashMap<String,String>();
// 添加元素到集合
map.put("胡歌", "霍建华");
map.put("郭德纲", "于谦");
map.put("薛之谦", "大张伟");
// 获取 所有的 entry对象 entrySet
Set<Entry<String,String>> entrySet = map.entrySet();
// 遍历得到每一个entry对象
for (Entry<String, String> entry : entrySet) {
// 解析
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"的CP是:"+value);
}
}
}
练习:查找一个字符串中每个字符出现的次数
1.先创建一个map集合
2.运用String的length属性将字符串遍历
3.将遍历出的数据添加到map中
4.添加到map之前进行containkey判断,如果存在value++,不存在将字符串的值放到map的key键上。
public Class MapTest{
public static void main(String args[]){
String line = new Scanner(System.in).nextLine();
findChar(line);
}
public static void findChar(String line){
Map<Character,Integer> map = new HashMap<Chararcter,Integer>();
for(int i=0; i < line.length; i++){
char c = line.charAt(i);
if(!map.containKey(c)){
//第一次
map.put(c,1);
}else{
integer count = map.get(c);
map.put(c,++count);
}
}
sysout(map);
}
}