卡拉娃的爷爷 發表於 2025-11-13 11:22:00

Java算法题常用函数

<h2 id="java算法题常用函数">Java算法题常用函数</h2>
<h3 id="string-字符串">String 字符串</h3>
<ol>
<li>
<p><code>charAt(int index)</code>方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。</p>
</li>
<li>
<p><code>length() </code>方法用于返回字符串的长度。空字符串的长度返回 0。</p>
</li>
<li>
<p>将String字符串转化成char数组</p>
<p><code>char[] chars = string.toCharArray();</code></p>
</li>
<li>
<p>char数组转String</p>
<p><code>new String (charArray); // charArray =&gt; char[] charArray</code></p>
</li>
<li>
<p>返回一个新字符串,它是此字符串的一个子字符串</p>
<p><code>String sub = str.substring(int start, int end)</code></p>
</li>
<li>
<p>指定字符在此字符串中第一次出现处的索引</p>
<p><code>str.indexOf(int ch)</code></p>
</li>
<li>
<p>删除字符串前后的空白符</p>
<p><code>str.trim()</code></p>
</li>
</ol>
<h4 id="stringbufferstringbuilder">StringBuffer/StringBuilder</h4>
<ul>
<li>
<p>在使用 <strong>StringBuffer</strong> 类时,每次都会对 <strong>StringBuffer</strong> 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。</p>
</li>
<li>
<p><strong>StringBuilder</strong> 类在 Java 5 中被提出,两者最大不同在于 <strong>StringBuilder</strong> 的方法不是线程安全的(不能同步访问)。</p>
</li>
<li>
<p>由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。</p>
</li>
</ul>
<ol>
<li>
<p>初始化</p>
<p><code>StringBuilder sb = new StringBuilder(length)</code></p>
</li>
<li>
<p>返回长度(字符数)</p>
<p><code>sb.length()</code></p>
</li>
<li>
<p>将指定的字符串追加到此字符序列</p>
<p><code>sb.append(String s)</code></p>
</li>
<li>
<p>将此字符序列用其反转形式取代</p>
<p><code>sb.reverse()</code></p>
</li>
<li>
<p>返回一个新的&nbsp;<code>String</code>,它包含此序列当前所包含的字符子序列</p>
<p><code>sb.substring(int start, int end)</code></p>
</li>
<li>
<p>转换成String</p>
<p><code>String str = sb.toString();</code></p>
</li>
</ol>
<h3 id="stack-栈">Stack 栈</h3>
<ol>
<li>
<p>初始化</p>
<p><code>Stack&lt;?&gt; stack = new Stack();</code></p>
</li>
<li>
<p>判断堆栈是否为空</p>
<p><code>stack.isEmpty()</code></p>
</li>
<li>
<p>查看堆栈顶部的对象,但不从堆栈中移除它</p>
<p><code>stack.peek()</code></p>
</li>
<li>
<p>移除堆栈顶部的对象,并作为此函数的值返回该对象</p>
<p><code>stack.pop()</code></p>
</li>
<li>
<p>元素压入堆栈顶部</p>
<p><code>stack.push()</code></p>
</li>
<li>
<p>返回对象在堆栈中的位置,以 1 为基数</p>
<p><code>int pos = stack.search()</code></p>
</li>
</ol>
<h3 id="array-数组">Array 数组</h3>
<ol>
<li>
<p>初始化长度为size的数组</p>
<p><code>int[] array = new int</code></p>
</li>
<li>
<p>数组长度</p>
<p><code>array.length</code></p>
</li>
<li>
<p>数组的排序</p>
<p><code>Arrays.sort(array)</code></p>
</li>
<li>
<p>二维int类型数组的排序按首个数字<strong>升序</strong>排序 (lambda表达式写法)</p>
<p><code>Arrays.sort(array, (v1, v2) -&gt; v1 - v2)</code></p>
<p>ps: 匿名内部类写法</p>
<pre><code class="language-java">Arrays.sort(array, new Comparator&lt;int[]&gt;() {
    @Override
    public int compare(int[] v1, int[] v2) {
      // 与 Lambda 表达式逻辑完全一致
      return v1 - v2;
    }
});
</code></pre>
</li>
<li>
<p>当区间左端点相同的时候,按照右端点降序排序</p>
<pre><code class="language-java">Arrays.sort(intervals, (o1, o2) -&gt; {
    if(o1 == o2){
      return o1 - o2;
    }
    return o2 - o1;
});
</code></pre>
</li>
<li>
<p>用于一维数组的初始化或者填充</p>
<p><code>Arrays.fill(array, 1);</code></p>
</li>
<li>
<p>复制新数组,并指定长度 (例: 将数组array复制一个新数组, 并指定长度为length)</p>
<p><code>int[] copy = Arrays.copyOf(array, length)</code></p>
</li>
</ol>
<h3 id="list-列表">List 列表</h3>
<ul>
<li>
<p><strong>以下情况使用 ArrayList :</strong></p>
<ul>
<li>
<p>频繁访问列表中的某一个元素(随机访问)。</p>
</li>
<li>
<p>只需要在列表<strong>末尾</strong>进行添加和删除元素操作。</p>
</li>
</ul>
</li>
<li>
<p><strong>以下情况使用 LinkedList :</strong></p>
<ul>
<li>你需要通过循环迭代来访问列表中的某些元素。</li>
<li>需要频繁的在列表开头、中间、末尾等位置进行<strong>添加</strong>和<strong>删除</strong>元素操作。</li>
</ul>
</li>
</ul>
<ol>
<li>
<p>初始化</p>
<pre><code class="language-java">List&lt;T&gt; list = new LinkedList&lt;&gt;();
List&lt;T&gt; list = new ArrayList&lt;&gt;();
</code></pre>
</li>
<li>
<p>列表的尾部插入指定元素</p>
<p><code>list.add(Object o);</code></p>
</li>
<li>
<p>列表的尾部移除元素(一般用于dfs算法 进行回溯)</p>
<p><code>list.remove(list.size() - 1); //删除最后一个元素</code></p>
</li>
<li>
<p>判断集合中是否存在这个元素</p>
<p><code>list.contains(Object o); // 返回true 或 false</code></p>
</li>
<li>
<p>将数组转为List</p>
<p><code>List&lt;String&gt; names = Arrays.asList(new String[]{"zhangsan","li"});</code></p>
<ul>
<li>
<p>List转为数组</p>
<p><code>T[] array = list.toArray();</code></p>
</li>
</ul>
</li>
<li>
<p>集合排序</p>
<p><code>Collections.sort(list); // 返回值为void</code></p>
</li>
</ol>
<h3 id="queue-队列">Queue 队列</h3>
<ol>
<li>
<p>初始化</p>
<p><code>Queue&lt;Integer&gt; queue = new LinkedList()</code></p>
</li>
<li>
<p>添加元素</p>
<p><code>queue.offer(Object o);</code></p>
</li>
<li>
<p>删除队列中的第一个元素</p>
<p><code>queue.poll(Object o);   // 返回队列的第一个元素</code></p>
</li>
<li>
<p>判断是否为空</p>
<p><code>queue.isEmpty();</code></p>
</li>
<li>
<p>获取队列的大小</p>
<p><code>queue.size();</code></p>
</li>
</ol>
<h4 id="priorityqueue-优先队列">PriorityQueue 优先队列</h4>
<ul>
<li>优先级队列并不是队列中所有的元素都是按照优先级排放的,<strong>只能保证出队顺序是按照优先级</strong>进行的</li>
</ul>
<ol>
<li>
<p>初始化</p>
<pre><code class="language-java">Queue&lt;Integer&gt; queue = new PriorityQueue&lt;&gt;((a, b) -&gt; b - a);
</code></pre>
</li>
</ol>
<h3 id="maphashmap">Map/HashMap</h3>
<ul>
<li>
<p><strong>Map</strong>是接口,<strong>HashMap</strong>是具体实现</p>
</li>
<li>
<p><strong>HashMap</strong> 实现了 <strong>Map</strong> 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。</p>
</li>
</ul>
<ol>
<li>
<p>初始化</p>
<pre><code>Map&lt;T, T&gt; map = new HashMap();
</code></pre>
</li>
<li>
<p>获取指定键的值</p>
<p><code>map.get(Object o);</code></p>
</li>
<li>
<p>添加一个映射</p>
<p><code>map.put(K key, V value)</code></p>
</li>
<li>
<p>是否包含指定的key</p>
<p><code>containsKey(Object key) \\如果此映射包含指定键的映射关系,则返回 true</code></p>
</li>
<li>
<p>是否包含指定的value</p>
<p><code>containsValue(Object value) \\如果此映射将一个或多个键映射到指定值,则返回 true</code></p>
</li>
<li>
<p>Map遍历</p>
<pre><code class="language-java">Map&lt;String, Integer&gt; map = new HashMap();
map.put("zhangsan",1);
map.put("li",2);
map.put("wangwu",2);
for (Map.Entry&lt;String, Integer&gt; m: map.entrySet()) {
    System.out.println("姓名: "+m.getKey()+" 编号: "+m.getValue());
}
</code></pre>
</li>
</ol>
<h4 id="hashset-集合">HashSet 集合</h4>
<ul>
<li>
<p><strong>HashSet</strong> 基于HashMap 来实现的,是一个不允许有重复元素的集合。</p>
</li>
<li>
<p>HashSet 允许有 null 值。</p>
</li>
</ul>
<ol>
<li>
<p>初始化</p>
<p><code>HashSet&lt;T&gt; set = new HashSet&lt;&gt;();</code></p>
</li>
<li>
<p>添加元素</p>
<p><code>set.add(Object o);</code></p>
</li>
<li>
<p>判断元素是否存在</p>
<p><code>set.contains(Object o);</code></p>
</li>
<li>
<p>删除元素</p>
<p><code>set.remove(Object o);</code>\</p>
</li>
<li>
<p>计算元素数量</p>
<p><code>set.size()</code></p>
</li>
<li>
<p>迭代</p>
<pre><code class="language-java">public class RunoobTest {
    public static void main(String[] args) {
    HashSet&lt;String&gt; sites = new HashSet&lt;String&gt;();
      sites.add("Google");
      sites.add("Runoob");
      sites.add("Runoob");   // 重复的元素不会被添加
      for (String i : sites) {
            System.out.println(i);
      }
    }
}
</code></pre>
</li>
</ol><br><br>
来源:https://www.cnblogs.com/HsiaYuBing/p/19217260
頁: [1]
查看完整版本: Java算法题常用函数