Java学习
java-数据结构的使用
一、Collection 接口

1)List列表 —— 有序、值可重复
1、ArrayList
优点: 底层数据结构是数组Array,查询快。增删慢。
缺点: 线程不安全,效率高
2、Vector
优点: 底层数据结构是数组Array,查询快。增删慢。
缺点: 线程安全,效率低
*Vector是实现了 synchronized 的,这也是Vector和ArrayList的唯一的区别。
3、LinkedList
优点: 底层数据结构是链表LinkedList,增删快。查询慢。
缺点: 线程不安全,效率高*链表的每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites);
System.out.println(sites.get(1)); // 访问第二个元素
sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
}
以上实例,执行输出结果为:
[Google, Runoob, Taobao, Weibo]
2)Set 集 —— 值不可重复
1、HashSet
允许null值
调用add()方法向Set中添加对象,底层数据结构是哈希表,无序。
依赖两个方法来保证元素唯一性:hashCode()和equals()。使用对象的值来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性。
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Runoob"); // 重复的元素不会被添加
sites.remove("Google"); //移除
System.out.println(sites.contains("Taobao")); //返回bool
System.out.println(sites.size()); //大小
//迭代
for (String i : sites) {
System.out.println(i);
}
2、LinkedHashSet
底层数据结构是双向链表和哈希表,有序。
由链表保证元素有序,由哈希表保证元素唯一。
3、TreeSet
底层数据结构是红黑树,内部实现排序,也可以自定义排序规则。
自然排序、比较器排序保证元素排序。根据比较的返回值是否是0来保证元素唯一性。
4、ArraySet
底层数据结构是双数组,有序。
Android.util包下的类,实时扩容,节约内存。推荐代替使用HashSet。
二、Map 接口
Map接口有三个比较重要的实现类:HashMap、TreeMap、HashTable。
1)HashMap —— 无序
- 如果key相同,则覆盖原始值;如果key出现冲突,则将当前的key-value放入链表。在链表中做进一步的对比value。
- 没有 synchronized关键字,即非线程安全,因此效率较高;
- 允许存放null键和null值
2)HashTable —— 无序
- 散列表,也叫哈希表,存储的内容是键值对(key-value)映射;
- Hashtable源码所有 public 方法声明中都有 synchronized关键字,线程安全,效率低;
- 不允许null值;(因为equlas()方法需要对象)
- 父类是Dictionary。
3)TreeMap —— 有序
父类是SortMap接口。能够把它保存的键值对根据key排序,基于红黑树,从而保证TreeMap中所有键值对处于有序状态。
三、数组字符串
1.数组的初始化
int[] nums = new int[len];
2.java中遍历字符串的三种方式
java中遍历字符串的三种方式(String类的方法)
1).toCharArray()(将字符串转换为字符数组)
2).length(), charAt()
3).length(), substring(i ,i+1)
public static void main(String[] args) {
String str = "keep walking!!!";
//方法一
char[] charArray = str.toCharArray();
for (char i:charArray){
System.out.println(i);
}
或者直接也可
for (char i:charArray){
System.out.println(i);
}
/*for (int i = 0; i < charArray.length; i++) {
System.out.println(c[i]);
}*/
// 方法二 charAt() 方法可返回指定位置的字符。
for (int i = 0; i < str.length(); i++) {
System.out.println(str.charAt(i));
}
//方法三
for (int i = 0; i < str.length(); i++) {
System.out.println(str.substring(i, i + 1));
}
}
3.string截取字符串
substring(a,b);的意思是截取第a个字符和第b个字符中间的字符串,a前和b后的字符串不取
4.返回字符串中的某个子串
charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1
public String substring(int beginIndex)
或
public String substring(int beginIndex, int endIndex)
- beginIndex -- 起始索引(包括), 索引从 0 开始。
- endIndex -- 结束索引(不包括)。

浙公网安备 33010602011771号