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 -- 结束索引(不包括)。
posted @ 2021-11-01 21:59  Killaua  阅读(56)  评论(0)    收藏  举报