Class CharBag

java.lang.Object
com.github.tommyettinger.ds.CharList
com.github.tommyettinger.ds.CharBag
All Implemented Interfaces:
Arrangeable, Ordered.OfChar, PrimitiveCollection<Character>, PrimitiveCollection.OfChar, Appendable, CharSequence, Comparable<CharList>

public class CharBag extends CharList implements CharSequence, Appendable
An unordered List of char items. This allows efficient iteration via a reused iterator or via index. This class avoids a memory copy when removing elements (the last element is moved to the removed element's position). Items are permitted to change position in the ordering when any item is removed or added. Although this won't keep an order during modifications, you can CharList.sort() the bag to ensure, if no modifications are made later, that the iteration will happen in sorted order.
  • Constructor Details

    • CharBag

      public CharBag()
      Creates an ordered bag with a capacity of 10.
    • CharBag

      public CharBag(int capacity)
      Creates an ordered bag with the specified capacity.
      Parameters:
      capacity -
    • CharBag

      public CharBag(CharList list)
      Creates a new bag containing the elements in the specific list or bag. The capacity is set to the number of elements, so any subsequent elements added will cause the backing array to be grown.
      Parameters:
      list - another CharList or CharBag
    • CharBag

      public CharBag(char[] array)
      Creates a new bag containing the elements in the specified array. The capacity is set to the number of elements, so any subsequent elements added will cause the backing array to be grown.
      Parameters:
      array - a non-null char array to add to this bag
    • CharBag

      public CharBag(char[] array, int startIndex, int count)
      Creates a new bag containing the elements in the specified array. The capacity is set to the number of elements, so any subsequent elements added will cause the backing array to be grown.
      Parameters:
      array - a non-null char array to add to this bag
      startIndex - the first index in array to use
      count - how many items to use from array
    • CharBag

      public CharBag(PrimitiveCollection.OfChar coll)
      Creates a new bag containing the items in the specified PrimitiveCollection.OfChar.
      Parameters:
      coll - a primitive collection that will have its contents added to this
    • CharBag

      public CharBag(CharIterator coll)
      Creates a new instance containing the items in the specified iterator.
      Parameters:
      coll - an iterator that will have its remaining contents added to this
    • CharBag

      public CharBag(Ordered.OfChar other)
      Copies the given Ordered.OfChar into a new bag.
      Parameters:
      other - another Ordered.OfChar
    • CharBag

      public CharBag(Ordered.OfChar other, int offset, int count)
      Creates a new bag by copying count items from the given Ordered, starting at offset in that Ordered, into this.
      Parameters:
      other - another Ordered.OfChar
      offset - the first index in other's ordering to draw an item from
      count - how many items to copy from other
    • CharBag

      public CharBag(CharSequence other)
    • CharBag

      public CharBag(CharSequence other, int start, int end)
      Creates a new CharBag from part of another CharSequence; start is inclusive and end is exclusive.
      Parameters:
      other - a CharSequence to use part of, such as a String or a CharList
      start - first index in other to use, inclusive
      end - last index in other to use, exclusive
  • Method Details

    • keepsOrder

      public boolean keepsOrder()
      Returns true if this implementation retains order, which it does not.
      Overrides:
      keepsOrder in class CharList
      Returns:
      false
    • insert

      public void insert(int index, char element)
      This always adds element to the end of this bag's ordering.
      Overrides:
      insert in class CharList
      Parameters:
      index - ignored
      element - element to be inserted
    • removeAt

      public char removeAt(int index)
      Removes and returns the item at the specified index. Note that this is equivalent to List.remove(int), but can't have that name because we also have CharList.remove(char) that removes a value, rather than an index.
      Overrides:
      removeAt in class CharList
      Parameters:
      index - the index of the item to remove and return
      Returns:
      the removed item
    • removeRange

      public void removeRange(int start, int end)
      Removes the items between the specified start index, inclusive, and end index, exclusive. Note that this takes different arguments than some other range-related methods; this needs a start index and an end index, rather than a count of items. This matches the behavior in the JDK collections.
      Specified by:
      removeRange in interface Ordered.OfChar
      Overrides:
      removeRange in class CharList
      Parameters:
      start - the first index to remove, inclusive
      end - the last index (after what should be removed), exclusive
    • subSequence

      public CharBag subSequence(int start, int end)
      Gets a new CharBag from the given subrange, clamping start and end so that this will not throw any Exception.
      Specified by:
      subSequence in interface CharSequence
      Specified by:
      subSequence in interface Ordered.OfChar
      Overrides:
      subSequence in class CharList
      Parameters:
      start - the start index, inclusive; clamped
      end - the end index, exclusive; clamped
      Returns:
      a new CharBag copied from the given subrange bounds
    • append

      public CharBag append(CharSequence csq)
      Specified by:
      append in interface Appendable
      Overrides:
      append in class CharList
    • append

      public CharBag append(CharSequence csq, int start, int end)
      Specified by:
      append in interface Appendable
      Overrides:
      append in class CharList
    • append

      public CharBag append(char c)
      Specified by:
      append in interface Appendable
      Overrides:
      append in class CharList
    • appendLine

      public CharBag appendLine()
      Appends a literal newline (Unicode character u000A).
      Overrides:
      appendLine in class CharList
      Returns:
      this, for chaining.
    • line

      public CharBag line()
      Appends a literal newline (Unicode character u000A). This is identical to appendLine() but is faster to type or recommend.
      Overrides:
      line in class CharList
      Returns:
      this, for chaining.
    • append

      public CharBag append(int number)
      Appends the base-10 signed textual form of the given number, without allocating. This uses Base.appendSigned(CharSequence, int).
      Overrides:
      append in class CharList
      Parameters:
      number - the int to append
      Returns:
      this, for chaining
    • append

      public CharBag append(long number)
      Appends the base-10 signed textual form of the given number, without allocating. This uses Base.appendSigned(CharSequence, long). This does not append a trailing 'L'.
      Overrides:
      append in class CharList
      Parameters:
      number - the long to append
      Returns:
      this, for chaining
    • append

      public CharBag append(float number)
      Appends the base-10 decimal or engineering textual form of the given number, without allocating. This uses Base.appendGeneral(CharSequence, float). This does not append a trailing 'f'.
      Overrides:
      append in class CharList
      Parameters:
      number - the float to append
      Returns:
      this, for chaining
    • append

      public CharBag append(double number)
      Appends the base-10 decimal or engineering textual form of the given number, without allocating. This uses Base.appendGeneral(CharSequence, double).
      Overrides:
      append in class CharList
      Parameters:
      number - the double to append
      Returns:
      this, for chaining
    • append

      public CharBag append(boolean value)
      Appends either the four chars 't', 'r', 'u', 'e' if value is true, or the five chars 'f', 'a', 'l', 's', 'e' if it is false.
      Overrides:
      append in class CharList
      Parameters:
      value - either true or false
      Returns:
      this, for chaining
    • hashCode

      public int hashCode()
      Specified by:
      hashCode in interface PrimitiveCollection<Character>
      Overrides:
      hashCode in class CharList
    • padLeft

      public CharBag padLeft(int count, char padWith)
      Adds count repetitions of padWith to the start (left) of this list.
      Note that because the order of a bag is unreliable, this could conceivably pad to any point in the order, but this does actually move all elements to the right and prepend padWith count times.
      Overrides:
      padLeft in class CharList
      Parameters:
      count - how many repetitions of padWith to add
      padWith - the item to pad with
      Returns:
      this, for chaining
    • padRight

      public CharBag padRight(int count, char padWith)
      Adds count repetitions of padWith to the end (right) of this list.
      Overrides:
      padRight in class CharList
      Parameters:
      count - how many repetitions of padWith to add
      padWith - the item to pad with
      Returns:
      this, for chaining
    • with

      public static CharBag with()
      Constructs an empty bag. This is usually less useful than just using the constructor, but can be handy in some code-generation scenarios when you don't know how many arguments you will have.
      Returns:
      a new bag containing nothing
    • with

      public static CharBag with(char item)
      Creates a new CharBag that holds only the given item, but can be resized.
      Parameters:
      item - a char item
      Returns:
      a new CharBag that holds the given item
    • with

      public static CharBag with(char item0, char item1)
      Creates a new CharBag that holds only the given items, but can be resized.
      Parameters:
      item0 - a char item
      item1 - a char item
      Returns:
      a new CharBag that holds the given items
    • with

      public static CharBag with(char item0, char item1, char item2)
      Creates a new CharBag that holds only the given items, but can be resized.
      Parameters:
      item0 - a char item
      item1 - a char item
      item2 - a char item
      Returns:
      a new CharBag that holds the given items
    • with

      public static CharBag with(char item0, char item1, char item2, char item3)
      Creates a new CharBag that holds only the given items, but can be resized.
      Parameters:
      item0 - a char item
      item1 - a char item
      item2 - a char item
      item3 - a char item
      Returns:
      a new CharBag that holds the given items
    • with

      public static CharBag with(char item0, char item1, char item2, char item3, char item4)
      Creates a new CharBag that holds only the given items, but can be resized.
      Parameters:
      item0 - a char item
      item1 - a char item
      item2 - a char item
      item3 - a char item
      item4 - a char item
      Returns:
      a new CharBag that holds the given items
    • with

      public static CharBag with(char item0, char item1, char item2, char item3, char item4, char item5)
      Creates a new CharBag that holds only the given items, but can be resized.
      Parameters:
      item0 - a char item
      item1 - a char item
      item2 - a char item
      item3 - a char item
      item4 - a char item
      item5 - a char item
      Returns:
      a new CharBag that holds the given items
    • with

      public static CharBag with(char item0, char item1, char item2, char item3, char item4, char item5, char item6)
      Creates a new CharBag that holds only the given items, but can be resized.
      Parameters:
      item0 - a char item
      item1 - a char item
      item2 - a char item
      item3 - a char item
      item4 - a char item
      item5 - a char item
      item6 - a char item
      Returns:
      a new CharBag that holds the given items
    • with

      public static CharBag with(char item0, char item1, char item2, char item3, char item4, char item5, char item6, char item7)
      Creates a new CharBag that holds only the given items, but can be resized.
      Parameters:
      item0 - a char item
      item1 - a char item
      item2 - a char item
      item3 - a char item
      item4 - a char item
      item5 - a char item
      item6 - a char item
      Returns:
      a new CharBag that holds the given items
    • with

      public static CharBag with(char... varargs)
      Creates a new CharBag that holds only the given items, but can be resized. This overload will only be used when an array is supplied and the type of the items requested is the component type of the array, or if varargs are used and there are 9 or more arguments.
      Parameters:
      varargs - a char varargs or char array; remember that varargs allocate
      Returns:
      a new CharBag that holds the given items
    • parse

      public static CharBag parse(String str, String delimiter)
      Calls parse(String, String, boolean) with brackets set to false.
      Parameters:
      str - a String that will be parsed in full
      delimiter - the delimiter between items in str
      Returns:
      a new collection parsed from str
    • parse

      public static CharBag parse(String str, String delimiter, boolean brackets)
      Creates a new collection and fills it by calling PrimitiveCollection.OfChar.addLegible(String, String, int, int) on either all of str (if brackets is false) or str without its first and last chars (if brackets is true). Each item is expected to be separated by delimiter.
      Parameters:
      str - a String that will be parsed in full (depending on brackets)
      delimiter - the delimiter between items in str
      brackets - if true, the first and last chars in str will be ignored
      Returns:
      a new collection parsed from str
    • parse

      public static CharBag parse(String str, String delimiter, int offset, int length)
      Creates a new collection and fills it by calling PrimitiveCollection.OfChar.addLegible(String, String, int, int) with the given four parameters as-is.
      Parameters:
      str - a String that will have the given section parsed
      delimiter - the delimiter between items in str
      offset - the first position to parse in str, inclusive
      length - how many chars to parse, starting from offset
      Returns:
      a new collection parsed from str