when two objects need to be stored at the same index within the hash set listbecause their computed indices are identicalwe call this collision it is necessary to define collision resolution scheme to deal with this there are many different schemes that are possible we'll explore scheme called linear probing when collision occurs while using linear probingwe advance to the next location in the list to see if that location might be available we can tell if location is available if we find none value in that spot in the list it turns out that there is one other value we might find in the list that means that location is available special type of object called __placeholder object might also be stored in the list the reason for this class will become evident in the next section for nowa none or __placeholder object indicates an open location within the hash set list the code in sect takes care of adding an item into the hashset list and is helper function for the actual add method hashset add helper function def __add(item,items)idx hash(itemlen(itemsloc - while items[idx!noneif items[idx=itemitem already in set return false if loc and type(items[idx]=hashset __placeholderloc idx idx (idx len(items if loc loc idx items[locitem return true the code in sect does not add an item that is already in the list the while loop is the linear probing part of the code the index idx is incrementedmod the length of the listuntil either the item is found or none value is encountered finding none value indicates the end of the linear chain and hence the end of any linear searching that must be done to determine if the item is already in the set if the item is not in the listthen the item is added either at the location of the first __placeholder object found in the searchor at the location of the none value at the end of the chain there is one more issue that must be dealt with when adding value imagine that only one position was open in the hash set list what would happen in the code abovethe linear search would result in searching the entire list if the list were fullthe result would be an infinite loop we don' want either to happen in factwe want to be able to add an item in amortized ( time to insure that we get an amortized complexity of ( )the list must never be full or almost full this copy belongs to 'acha