[java] 常用数据结构的定义以及相关函数

1、数组及列表

1. 数组 []

int[] array=new int[size];
int[] array = new int[]{1,2,3,4,5};
int[] array = {1,2,3,4,5};

自定义排序
nums是一个二维数组,里面的数组长度为2。下面的功能是对nums的第一个元素升序排序,若第一个元素一样则比较第二个元素。例如nums=[[1,3],[1,2],[0,5]],排序后为[[0,5],[1,2],[1,3]]

	Arrays.sort(nums, new Comparator<int[]>() {
        public int compare(int[] nums1, int[] nums2) {
            if(nums1[0]==nums2[0]){
                return nums1[1] - nums2[1];
            }
            return nums1[0] - nums2[0];
        }
    });

2. List (ArrayList和LinkedList)

定义

List<Integer> arrayList = new ArrayList<Integer>();
List<Integer> arrayList = new LinkedList<Integer>();

常用操作

  • 访问某个值:arrayList.get(i)
  • 添加某个值:arrayList.add(x)
  • 长度:arrayList.size()
  • 转数组:arrayList.toArray()arrayList.toArray(new int[arrayList.size()])
  • 第一次出现x的索引位置:arrayList.indexOf(x),最后出现x的索引位置用 lastIndexOf
  • 删除指定索引的对象:arrayList.remove(i)
  • 在索引为i的元素更改为x:arrayList.set(i,x)
  • 返回索引范围在[i,j)范围内的元素集合:arrayList.subList(i, j)
  • 是否包含某个元素:arrayList.contains(x)
  • 是否为空:arrayList.isEmpty()
  • 清空:arrayList.clear()

Iterator

	Iterator it = list.iterator();
	while (it.hasNext()) {
		String next = (String) it.next();
		// it.remove();删除当前元素
		System.out.println(next);
	}

	ListIterator lit = list.listIterator();
	while (lit.hasNext()) {
		String next = (String) lit.next();
		//lit.set("aa");用aa替换当前元素
		//lit.add("bb");在当前元素后面插入bb
		System.out.println(next);
	}
	//逆序遍历
	while (lit.hasPrevious()) {
		String next = (String) lit.previous();
		System.out.println(next);
	}

2、栈和队列

1. Stack

定义

Stack<Interger> stack = new Stack<Interger>();

常用操作

  • 入栈:stack.push(x)
  • 出栈:stack.pop()
  • 查看栈头:stack.peek()
  • 是否为空:stack.isEmpty()

2. Queue

定义

Queue<Interger> queue = new LinkedList<Interger>();

常用操作

  • 入队:queue.offer(x)
  • 出队:queue.poll()
  • 查看队头:stack.peek()
  • 是否为空:stack.isEmpty()

3. Deque

定义

Deque<Interger> deque = new LinkedList<Interger>();

常用操作

  • 向队头插入元素:deque.addFirst()或者deque.offerFirst()
  • 向队尾插入元素:deque.addLast()或者deque.offerLast()
  • 返回并移除队头元素:deque.removeFirst()或者deque.pollFirst()
  • 返回并移除队尾元素:deque.removeLast()或者deque.pollLast()
  • 获取队头元素但不移除:deque.getFirst()或者deque.peekFirst()
  • 获取队尾元素但不移除:deque.getLast()或者deque.peekLast()
  • 弹出栈中元素:deque.pop(),等价于removeFirst()
  • 向栈中压入元素:deque.push(),等价于addFirst()

4.PriorityQueue

可当作堆来使用

PriorityQueue<Integer> minHeap =new PriorityQueue<Integer>();//小顶堆,默认容量为11
PriorityQueue<Integer> maxHeap =new PriorityQueue<Integer>(11,new Comparator<Integer>(){//大顶堆,容量11
    @Override
    public int compare(Integer i1,Integer i2){
        return i2-i1;
    }
});
  • peek():获取堆顶元素但不移除
  • poll():获取并移除堆顶元素
  • add():添加一个元素
  • remove(Object o):移除值为o的元素,如果有的话
  • size(),isEmpty() ,clear()

3、哈希

1. map

定义

HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();

常用操作

  • 添加:map.push(key,value)
  • 根据key更新value:map.put(value,key)map.put(value,map.getOrDefault(value,0)+1);
  • 获取key对应的value值:map.get(key)
  • 大小:map.size()
  • 是否为空:map.isEmpty()
  • 删除key对应的值:map.remove(key),返回值是value
  • 是否存在key:map.containsKey(key)
  • 是否存在value:map.containsValue(value)
  • 遍历:

方法一:在for循环中使用entries实现Map的遍历:

/**
* 最常见也是大多数情况下用的最多的,一般在键值对都需要使用
 */
Map <String,String>map = new HashMap<String,String>();
map.put("熊大", "棕色");
map.put("熊二", "黄色");
for(Map.Entry<String, String> entry : map.entrySet()){
    String mapKey = entry.getKey();
    String mapValue = entry.getValue();
    System.out.println(mapKey+":"+mapValue);
}

方法二:在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好;

Map <String,String>map = new HashMap<String,String>();
map.put("熊大", "棕色");
map.put("熊二", "黄色");
//key
for(String key : map.keySet()){
    System.out.println(key);
}
//value
for(String value : map.values()){
    System.out.println(value);
}

2. set

定义

Set<Integer> set=new HashSet<Integer>();

4、字符串

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值